Django框架
Django
安装
- 建议使用python3.6,避免bug
- 计算机名不要使用中文
安装
pip install django==1.11.9
检验
django-admin
命令行操作
1.创建项目
首先使用cd 文件夹名切换到哦工作目录
django-admin startproject 项目名
比如
diango-admin startroject mysite
2.启动django项目
切换到mysite下
python manage.py runserver
python manage.py runserver 127.0.0.1:8080 #可自己加ip,hort
3.创建应用
在mystie文件下下
python manage.py startapp app01
注意:
-
命令行不会自动创建用户存放html文件的templates文件夹,需要手动在mysite下创建
-
配置文件中不会自动书写templates文件路径.
#如'DIRs'路径为空,则需要手动添加 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , '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', ], }, }, ]
创建一个app就需要在配置文件中注册app才可以生效
#settings 33行 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 'app01' # 简便写法 'app01.apps.App01Config' # 最完整的写法 ]
pycharm操作
file --> new project --> Django
-
创建应用,可以使用简便方式
Tools --> run manage.py task
之后直接startapp app01
django文件功能
django项目名
项目同名的文件夹
settings.py 暴露给用户的配置文件
urls.py 分发路由与视图函数
manage.py django的入口文件
应用名文件夹
migration文件夹 所有数据库相关操作记录
admin.py django admin后台管理
apps.py 注册app使用
models.py 放所有数据库相关的模型类
tests.py 测试文件
views.py 处理业务逻辑的视图函数
三个基本功能
HttpResponse
向前端返回字符串
render
向前端返回html文件
可以给后端的html文件传递参数
render()后第一个参数为request,第二给参数为向前端返回的html文件,第三个参数为传递参数,使用字典的形式发送.
def login(request):
user_dic = {'username':'agsol','password':'111'}
return render(request,'login.html',{'xxx':user_dic})
redirect
重定向
可以写本网站的路径后缀
可以写全路径
def home(request):
return redirect("/index")
#return redirect('https://www.baidu.com')
重启机制
django默认是自动重启的
内部有检测机制,实时检测所有的文件的变化,
建议手动重启
静态文件配置
-
默认情况下所有的html文件都是放在templates文件夹内
-
啥是静态文件
网页所使用到的提前写的css,js,第三方前端模块,图片,都叫静态资源.
-
默认情况下,网站是用到的静态文件资源全部都会放在static文件夹下
为了方便管理 static文件夹下还会再吉安其他文件夹
css js font img Boot/strap fontawesome
而django中需要手动创建静态文件存放的文件夹,与app01平级,且再settings中配置如下文件
其中,STATICLISTS_DIRS为列表,可以定义多个文件夹
#这是访问静态文件资源结构前缀,通常为static STATIC_URL = '/static/' #当static_url的参数和动态html的参数一致时,可以访问静态库, #静态资源所在文件夹路径 STATICFILES_DIRS = [ # 静态资源所在的文件夹路径 os.path.join(BASE_DIR,'static'), # 将static文件里面所有的资源暴露给用户 os.path.join(BASE_DIR,'static1'), # 将static文件里面所有的资源暴露给用户 # os.path.join(BASE_DIR,'static2'), # 将static文件里面所有的资源暴露给用户 ]
-
静态文件动态绑定
{% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
注意事项
form表单默认是get请求
http://127.0.0.1:8000/login/?username=jason&password=jason123
特点:url?xxx=xxx&yyy=yyy
- 携带的数据不安全
- 携带的数据大小有限制,2~8k
- 通常携带一些不是很重要的数据
form 的 action属性
- 不写,默认向当前地址提交
- 只写后缀 /admin
- 写全路径
https://www.baidu.com
中间件
前期如果提交post请求时出现403
需要settings中配置
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',
]
视图函数必须有返回值
django后端的视图函数 默认处理get请求
无论发的是get请求还是post请求,都会执行视图函数(HttpResponse类)
get请求执行拿到login页面
post请求意在提交数据,然后后端校验
request方法
携带数据的方式
-
GET请求携带数据的方式
url?username=jason&password=123
注意:只要url后面符号get请求携带参数的特点满足,无论发什么请求,都可以使用request.GET获取数据
-
POST请求携带数据的方式
在请求体之中
request.method
获取请求方式 纯大写的字符串(GET 或 POST)
request.POST
获取用户提交post请求数据
获取方法
request.POST.get() # 默认只会获取列表最后一个元素
request.POST.getlist() # 如果你想获取列表 用getlist()
request.GET
获取用户提交GET请求数据
获取方法
request.POST.get() # 默认只会获取列表最后一个元素
request.POST.getlist() # 如果你想获取列表 用getlist()
django连接数据库
django默认自带一个小型的sqlite(对日期格式的数据不太兼容)
-
在settings中设置DATABASES
-
在项目或者app下的
__init.py__
中写入django连接数据库的语句import pymysql pymysql.install_as_MySQLdb()
ORM
缺点:封装程度太高,有时候会出现查询效率偏低的问题.
工作中:简单的使用orm,
复杂,追求速度,手写sql语句
django中操作ORM
在models里面书写类
数据库迁移命令
- python manage.py makemigrations #将对数据库的修改,记录到migrations文件夹内
- python manage.py migrate #将修改操作同步到数据库
注意:1,2两条语句必须成对出现,只要修改了models里的代码并想落到数据库中,就要重新执行上述命令
模型表字段的操作
字段的修改
models里面修改代码然后执行两条迁移命令
#在设置新增字段的时候直接添加默认值
email = models.EmailField(default = '111@qq.com') #默认varchar
#允许字段为空
phone = models.BigIntegerField(null = True)
#如果不写,系统会提示,可在提示中直接添加
gender = models.CharField(max_length=32)
字段的删除
注释对应字段,执行两条迁移命令,
注意:删除字段的同时,字段内对应的数据也会被删除,慎用!
模型表数据的操作
查
data = models.User.objects.filter(username=username).first() #<QuerySet [<User: User object>]>
支持索引取值,支持切片操作,不支持负索引,建议使用.first()
"""
filter返回的结果是一个"查询列表",里面是真正的数据对象
filter括号内可放多个关键字参数,在查询的时候,这些关键字参数是and的关系
"""
user_list = models.User.objects.all() #等价于 models.User.objects.filter()
"""
结果是一个"查询列表",里面是一个个数据对象
"""
增
user_obj = models.User.objects.create(username=username,password=password)
#create方法会有一个返回值,返回值就是当前被创建的对象本身
改
models.User.objects.filter(id=edit_id).update(username=username,password=password)
#批量操作 将符合filter后条件查询出的所有对象全部更新
删
models.User.objects.filter(id=delete_id).delete()
#批量操作 将符合filter后条件查询出的所有对象全部删除
注意:
update和delete方法针对filter()方法得到的列表,不可以对方法中单独取出的对象使用.