zoukankan      html  css  js  c++  java
  • 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 然后取值
     
  • 相关阅读:
    python 模块基础介绍
    python 函数基础介绍
    性能测试总结与分享材料
    徒手撸一个简单的RPC框架
    【springcloud】一文带你搞懂API网关
    一次非常有意思的sql优化经历
    MySQL数据库之互联网常用分库分表方案
    后端开发应该掌握的Redis基础
    权限管理模块设计
    基于redis的分布式锁的分析与实践
  • 原文地址:https://www.cnblogs.com/onda/p/7605400.html
Copyright © 2011-2022 走看看