Django复习比较!!!
有段时间没基础Django了,找了个视频重新回顾学习以下。
首先安装虚拟环境,然后安装Django包,用的1.11.7
安装好之后,在环境中导入django ,通过django.get_version()方法获取版本名称
创建项目:
django-admin.py startproject dj01
在虚拟环境中通过 djang-admin.py stattproject 项目名 创建目录
项目的结构图如下:
dj02
├── dj02
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
然后是创建app, 通过 python manage startapp app名字
需要在setting中INSTALLED_APPS的列表中添加app的名字。
后面配置路由,与视图函数,视图函数可以在views模块中写,具体不限制地方,视图函数默认的传入为request对象,必须添加参数
返回为html render(req,"xxx.html")或者为HttpResponse
配置urls可以项目文档下面配置url,也可以用过
# 添加子路径 url(r"t01/", include("t01.urls")),
在主路由的列表中,添加该参数,后面在项目的app中添加路由。
-
打开pycharm-->
选择new project,出现下面的对话框。
-
示例图
2、Django将自动生成下面的目录结构
-
说明
当点击create之后,等待安装完成之后会创建如下项目结构
-
示例图
3、创建app
-
说明
在每个Django项目中可以包含多个APP,相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也可以有联系。所有的APP共享项目资源。
-
示例图
4、注册app
-
说明
通过命令创建的app,都必须注册,注册方式在项目根目录下的settings.py文件中
-
示例图
5、Django路径结构
-
工程目录(和工程名字相同)
__init__
工程初始化文件
settings.py 工程的配置文件
urls.py 做路由分发的
wsgi.py 网关文件 平时不用动 只有在线上部署的时候才会使用
-
APP目录 (和APP的名字相同)
migrations 目录:存放一些我们生成的迁移文件(明天再说)
__init__
app的初始化文件
admin.py 站点管理
apps.py app名字配置(不要动)
models.py 定义我们的数据 和对数据的操作(class)
tests.py Django的测试
views.py 业务逻辑
-
manage.py 工程的运行文件 程序的主入口
-
db.sqlte3 数据库文件
6、settings文件重点介绍
import os
#项目根目录
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
#项目安全码
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '&x3ws0akafv6n_4abk$k8ea1r6q(44vh7$5aus^ohlqw$etay@'
# SECURITY WARNING: don't run with debug turned on in production!
# 处于开发模式
DEBUG = True
# 允许访问该服务的IP或者域名
ALLOWED_HOSTS = ["*"]
# Application definition
# Django 已经配置好的内置APP 此处需要加入我们自己创建的APP 比如teach1
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"teach1"
]
# django的中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
#该工程的根路由配置
ROOT_URLCONF = 'day01.urls'
# 模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# WSGI应用配置
WSGI_APPLICATION = 'day01.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
# 数据库配置 默认是SQLite数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
# 用户校验
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
# 语言设置zh-hans 是中文
LANGUAGE_CODE = 'zh-hans'
# 时区设置 Asia/Shanghai 是东八区 一下的USE_I18N USE_L10N USE_TZ都是国际化配置
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
# 是否使用timezone 设置成True 在后面的数据按照时间查询当使用月份时会出问题 所以可以设置成False
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
# 静态文件的请求路径
STATIC_URL = '/static/'
7、编写views.py
-
说明
业务处理逻辑都在views.py文件里。
-
示例图
8、编写路由
-
说明
路由都在urls文件里,它将浏览器输入的url映射到相应的业务处理逻辑。简单的urls编写
-
示例图
9、启动
-
说明
可以通过命令行启动,也可以使用pycharm工具来启动
-
命令行启动
# 默认 127.0.0.1:8000
python manage.py runserver
# 也可以使用指定的ip地址加端口
python manage.py runserver 0.0.0.0:8000 -
在浏览器输入http://127.0.0.1:8000/index/
-
pycharm启动
然后点击三角箭头运行,或者点击小昆虫采用debug运行
10、返回HTML文件
-
说明
通常我们都是将HTML文件返回给用户。而不是一个简单的字符串
-
示例图
11、使用静态文件
-
说明
到目前为止,我们能返回一个html界面给用户了,但html可能会包含js,css文件。在django中,一般将静态文件放在static目录中。接下来,在项目的根目录下新建个static目录,我们的js,css,img和各种插件都可以放置在这个目录里。
-
示例图
-
为了让django找到这个目录,我们需要对settings进行配置
-
在Html文件中使用静态文件
-
访问静态资源配置
![](http://zhangwei-imgs.oss-cn-beijing.aliyuncs.com/18-7-10/3600359.jpg
12、返回动态页面
-
说明
django有自己的模板语言,类似jinja2,根据提供的数据,替换掉HTML中的相应部分,详细的入门语法后期再讲
-
在views.py中
-
在template/index.html中
-
在浏览器显示
13、与数据库结合
-
说明
通过上面的案例,开发中常用的一些操作和基本流程我们已经走完,接下来就是最重要的一块,与数据库交互
Django通过自带的ORM框架操作数据库。
-
settings中,配置数据库相关的参数,如果使用自带的sqlite,不需要修改。
-
编辑models.py文件,也就是MTV中的M
-
在pycharm的teminal中通过命令生成迁移文件
python manage.py makemigrations hello
-
在pycharm的teminal中通过命令生成数据库表
python manage.py migrate
-
修改views.py
-
修改index.html
-
启动在浏览器查看
14 解析GET请求参数
编写views.py
def get_query_param(req):
# 获取请求参数
params = req.GET
#获取具体的参数名
book_id = params["book_id"]
# 看下解析出来的数据和对应的数据类型
print(book_id, type(book_id))
msg = "解析到的参数是%s" % book_id
return HttpResponse(msg)以上是我们在开发中常用的一些步骤,
web框架的Django,它的功能强大,内容全面,但同时也意味着限制颇多,灵活性低,可修改性差,这就是鱼和熊掌不可兼得了。我们学习Django,要理解它的基本原理,把握它整体框架,牢记一些基本规则,剩下的就是不断深入细节,然后熟能生巧、经验多少的问题了,不存在多高深的不可掌握技术。
15、总结
第一章节比较简单,回顾easy
-
-
all() 获取全部
get(id=888) 获取一个
只能是获取到一个对象 才不报错 没有或者返回多个都是报错
filter 获取一批
exclude 获取一批数据 刨除掉满足括号内给定的条件
# 查询被删除的数据
data = small_movie.objects.exclude(is_delete=False)
print(data)get() 获取单个 如果查到的数据是多个或者没查到会报错
filter() 查一批
all() 拿所有
exclude 查一批
first 拿第一个
last() 最后一个
count() 统计数量的
exists() 判断是不是查询到数据了
Q() 对象 用来条件的组合
F() 自己和自己比
执行原生的SQL语句查询
delete() 物理删除
删除
或者直接给对象属性赋值 然后调用.save()
update函数
模型名.objects.create()
对象实例化 然后赋值 调用.save()函数
增:
数据的操作
元信息
字段类型的选项
模型字段的类型
回顾
数据的查寻,可以用原生的sql -
from django.db import connection cur = connection.cursor()
-