django 请求过程,生命周期

 

 
 
 
请求过来:
中间件:拦截一部分请求;比如验证session, 没有登录的 请求一些页面,跳转至登录页;(图片为中间件的请求过程.)
再到 urls ,分发请求
到views 视图 ,通过 CBV(dispatch反射) 和 FBV 的 get 请求 讲 template 页面渲染返回给用户;
渲染之前 可以从数据库拿出数据,放到render 的参数里面传递过去, locals() 表示 把所有参数传递
还可以 实例化 其他 form 类,并渲染给前端
 
前端格式:
通过 从数据库拿到的,前端 通过{% for i in obj %}(obj 是后端render,参数里面定义的), {{i.class}}(class是 models 定义的项)
通过form 表单的 ,前端 通过 {{ obj.class }} (obj 是 后端视图 中 form类的 项)
 
模板还可以继承; 母页面 {% block content %} {% endblock %}
子页面
{% block content %}子页面的数据 {% endblock %}
 
然后前端通过 form表单, ajax iframe+form 伪ajax 向后端提交数据
POST请求的时候 $.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
}); 来解决 403 错误 ;django 内置了一个装饰器 可以把 views 中某个 类或函数 绕过403 检测 @csrf_exempt
from django.views.decorators.csrf import csrf_exempt,csrf_protect
而@csrf_protect 是 只这个类或函数 经过验证
 
然后 views 再拿到请求,通过 requests 拿到数据 进行处理;
数据多的话 可以进行分页处理:(1,django 内置; 2,自己写)
 
当用户提交了增加请求的时候;
通过views 调用ORM 对数据库进行操作;
分别是 一对1 一对多 和多对多
1对多: models.obj.objects.create(xx='xx')
一对多: 一样
多对多:一般是 操作第三张表
obj1=models.db1.objects.filter(xx='xx')
obj2=models.db2.objects.filter(aa='aa')
obj1.publish.add(*obj2) -->obj2必须是可迭代
 
删除:和增加一样
models.obj.objects.filter(id=1).delete()
一对多:
models.obj.objects.filter(publish_name='aa').delete()
多对多
obj1.publish.remove(*obj2)
修改:
models.obj.objects.filter(id=1).update(aa='aa')
一对多:
models.obj.objects.filter(publish_name='aa').update(aa='aa')
多对多:
先remove 后 add
 
查看:
models.obj.objects.filter(id=1)
models.obj.objects.get(id=1)
models.obj.objects.all()
一对多:
正向查询
models.obj.objects.filter(publish_name='aa')
反向查询
obj1=models.db1.objects.get(name='aa')
obj1.db2_set.all()
或者通过related_name
obj1.r_name.all() --》这里的 r_name 是在 models 的参数 related_name 的值
操作完数据库后返回给用户,
如果是ajax 请求 后端只能通过 Httpresponse 返回
返回的字符串 可以 通过 json.dumps 一个字典,这个字典可以 自己定义几个key;
tag{'msg':True,'data':None,'status':True,} 然后 ajax 判断 msg 和 status 然后取值
 
posted @ 2017-09-28 10:12  昂达达  阅读(1185)  评论(0编辑  收藏  举报