django第三天课上总结
day16
###1.内容回顾
- 1.路由
- 1.静态路由(url里是固定的值)
- user_list
- 2.动态路由(url里使用正则表达式)
- ^ $ . * + ? \d \w [0-9]
- 3.分组和命名分组
- () 捕获参数 --> 字符串
- 捕获参数 按照位置传参
- (?P<name>xxx)
- 捕获参数 按照关键字传参
- 4.include
- 路由分发
- 5.URL的命名和反向解析
- name URL别名
- 静态路由
- url(r'^user_list/',user_list ,name='user_list'),
- 反向解析
- 模板
- {% url 'user_list' %} --> '/app01/user_list/'
- PY文件
- from django.conf.urls import reverse
- reverse('user_list') --> '/app01/user_list/'
- 分组
- url(r'^user_list/(\d+)/',user_list ,name='user_list'),
- 反向解析
- 模板
- {% url 'user_list' 1 %} --> '/app01/user_list/1/'
- PY文件
- from django.conf.urls import reverse
- reverse('user_list',args=(1,)) --> '/app01/user_list/1/'
- 命名分组
- url(r'^user_list/(?P<pk>\d+)/',user_list ,name='user_list'),
- 反向解析
- 模板
- {% url 'user_list' 1 %} --> '/app01/user_list/1/'
- {% url 'user_list' pk=1 %} --> '/app01/user_list/1/'
- PY文件
- from django.conf.urls import reverse
- reverse('user_list',args=(1,)) --> '/app01/user_list/1/'
- reverse('user_list',kwargs={'pk':1}) --> '/app01/user_list/1/'
- 6.namespace
- url(r'^app01/', include('app01.urls', namespace='app01')),
- {% url 'app01:user_list' 1 %}
- 2.视图
- mvc mtv 的区别
- FBV基于函数的视图 CBV基于类的视图
- 定义CBV
```python
from django.views import View
class AddPub(View):
def get(self,request,*args,**kwargs):
# 处理GET请求
def post(self,request,*args,**kwargs):
# 处理post请求
```
- 使用
```python
url(r'^add_pub/',AddPub.as_view()),
```
- as_view()
- view函数中要去执行dispatch()
- dispatch --> 通过反射获取对应请求方式对应的方法
- request
- request.method 请求方式 GET POST
- request.GET url上参数 查询条件
- request.POST POST请求提交的数据
- request.body 请求体
- request.FILES 上传的文件 enctype="multipart/form-data"
- request.META 请求头的信息 HTTP_
- request.path_info 路径 不包含IP 端口 参数
- request.COOKIES
- request.session
- request.get_full_path() 路径 不包含IP 端口 包含参数
- request.is_ajax()
- response
- HttpRespnse('字符串') --> 返回字符串
- render(request,'模板的文件名',{}) --> 返回完整的页面
- redirect('地址') --> 重定向 Location: 地址
- JsonResponse({}) --> content-type: applicaton/json 传非字典的数据 safe=False
- 3.模板
- {{}} {% %}
- 变量
- render(request,'模板的文件名',{k:v})
- {{ k }}
- .key
- .属性或者方法
- .索引
- 过滤器filter
- {{ k|filter }} {{ k|filter:参数 }}
- default:'xx'
- add
- safe
- date 日期时间格式化 date:'Y-m-d H:i:s'
- length
- truncatechars
- truncatewords
- {% %}
- if 不支持算数运算 不支持连续判断 10>5>1
- {% if 条件 %}
- {% elif 条件 %}
- {% else %}
- {% endif %}
- for
- {% for i in list %}
- {{ forloop }} counter counter0 revcounter revcounter0 first last parentloop:{}
- {% endfor %}
- with
- csrf_token name=csrfmiddlewaretoken
- 母版和继承
- 母版
- 1.把多个页面的公共部分提取出来 --> HTML base.html
- 2.定义block
- 继承:
- 1.第一行写上{% extends 'base.html' %}
- 2.复写block块
- 静态文件:
- {% load static %}
- {% static '静态文件的相对路径' %} STATIC_URL = '/static/'
- {% get_static_prefix %} --> STATIC_URL = '/static/'
- 4.外键
- all_books = Book.objects.all()
- book_obj.title
- book_obj.pub --> 所关联的对象
- book_obj.pub_id --> 所关联的对象id
- 新增
```python
Book.objects.create(titl='xxx',pub=对象)
Book.objects.create(titl='xxx',pub_id=对象id)
```
- 修改
```python
book_obj.title= 'xxx'
# book_obj.pub=对象
book_obj.pub_id=对象id
book_obj.save()
```
- 删除
```python
book_obj.delete()
```
###2.今日内容
- 1.ORM操作
- https://www.cnblogs.com/maple-shaw/articles/9323320.html
- https://www.cnblogs.com/maple-shaw/articles/9403501.html
- 1.常用字段和参数
- 常用字段
- AutoField
- CharField
- IntegerField
- DateTimeField
- BooleanField
- DecimalField
- FileField
- 参数
- null 数据库可以为空
- blank 数据校验时可以为空
- default 默认值
- unique 唯一约束
- verbose_name 中文提示
- choices 可选择的数据
```python
class Meta:
# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
db_table = "person"
# admin中显示的表名称
verbose_name = '个人信息'
# verbose_name加s
verbose_name_plural = '所有用户信息'
# 联合索引
index_together = [
("pub_date", "deadline"), # 应为两个存在的字段
]
# # 联合唯一索引
unique_together = (("name", "age"),) # 应为两个存在的字段
```
- 2.必知必会13条
- models.Person.objects.all()
- 3.单表的双下划线
- 4.外键的查询
- 5.多对多的操作
- 2.ORM进阶
- 1.聚合和分组
- 2.F、Q、事务
- 事务
'
begin; 开启事务;
.....
commit; 提交
'
- 3.cookie和session
- https://www.cnblogs.com/maple-shaw/articles/9502602.html
- cookie
- 保存在浏览器上的一组组键值对,由服务器让浏览器进行设置的,下次自动携带相应的cookie去访问服务器.
- Django中的操作:
- 设置: Set-Cookie: is_login=1; Path=/
- ret= redirect('/index/')
- ret.set_cookie('is_login','1')
- ret.set_signed_cookie(key,value,salt='加密盐',...)
- 获取: Cookie
- request.COOKIES {}
- request.COOKIES.get(key)
- request.get_signed_cookie(key,default='',salt='加密盐',...)
- 删除: Set-Cookie '' max_age=0
- ret= redirect('/index/')
- ret.delete_cookie('is_login')
- session
- 保存在服务器上的一组组键值对,必须依赖cookie
- Django中的操作:
- 设置:
- request.session['is_login'] = '1'
- 获取:
- request.session['is_login']
- request.session.get(is_login)
- 删除:
- request.session.pop('is_login')
- request.session.delete() # 删除整个session数据 不删除cookie sessionid
- request.session.flush() # 删除整个session数据 删除cookie sessionid
- 其他
# 将所有Session失效日期小于当前日期的数据删除
- request.session.clear_expired()
- request.session.set_expiry(5) 设置超时时间