Django框架之回顾与补充(d79-80)
一 HTTP协议:(重点)
  1 请求
   -请求首行
    -GET /index HTTP/1.1
   -请求头部(在django框架中,可以从META中取出来)
    -key:value------>\r\n分割
   -请求体(post请求发的数据)   -----\r\n\r\n
    -往后台传数据的时候,有编码方式(urlencoded,form-data,json/text)
     默认urlencoded---->name=lqz&name=18---->从POST中取出
    -form-data---上传文件,数据在body体中的格式---->也从POST中取出
    -json---->从POST中取不出来,只能从body中取出,然后反序列化
  2 响应
   -响应首行(用空格区分)
    -HTTP/1.1 200 OK   ---\r\n    
   -响应头
    -key:value
   -响应体
    -html/css/js代码
二 web框架
  -django:大而全
  -flask:轻量级,第三方的插件
  -tornado:异步非阻塞
  -wsgi:Web Server Gateway Interface web服务网关接口---是一个协议
  -django测试阶段用的:wsgiref
   import socket
   def server_run():
    soc = socket.socket()
    soc.bind(('127.0.0.1', 8008))
    soc.listen(5)
    while True:
     conn, addr = soc.accept()
     recv_data = conn.recv(1024)    
     ----->django框架
     路由层
     模板层
     模型层    
     conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
     conn.close()
三 django框架所在位置:
  from wsgiref.simple_server import make_server
  def mya(environ, start_response):
   # print(environ)
   start_response('200 OK', [('Content-Type', 'text/html')])    
   return [b'404']
  class Test():
   pass
  test=Test()
  if __name__ == '__main__':
   myserver = make_server('127.0.0.1', 8011, test)
   print('监听8010')
   myserver.serve_forever()  
四 django简介
  -pip3 install django==1.11.09 -i 指定国内源
  -安装成功后,会在script文件夹下多django-admin.exe
  -用来创建django项目
  -django-admin startproject 项目名字(到指定文件夹下)
  -cd到项目目录下,可以创建app,可以运行项目,可以数据库迁移
  -创建app:python3 manage.py startapp app的名字
  -运行项目app:python3 manage.py runserver
  -数据库迁移1:python3 manage.py makemigrations
  -数据库迁移2:python3 manage.py migrate  
五 mvc和mtv
  -django 是mtv模式:
   -M:model   ---->模型
   -T:Template  --->模板
   -V:view    ---->视图
  -mvc模式:
   -M:model---->模型,数据库相关
   -v:view----->模板---->页面相关
   -C:controller--->控制器:url+view
  本质上:MTV就是MVC
   
六 Django请求生命周期
  详见博客
七 路由层
  一 Django中路由的作用
   -根据客户请求的路径,分发到不同的视图函数
  二 简单的路由配置
   -url('正则',函数,默认值,name)
   url(r'^author_update/', author.author_update,{'id':1}),
  三 有名分组,无名分组
   -利用正则分组:
    -有名分组:(?P<名字>\d+),分出的名字,会以关键字参数的形式,传到视图函数
    -无名分组:(\d+)分出的名字,会以位置参数的形式,传到视图函数  
  四 路由分发
   - url(r'^author_update/', include('子路由的路径')),
   -可以传子路由的路径字符串----推荐这种
   -可以传子路由的py文件
  五 反向解析
   -url(r'^author_update/', author.author_update,name='test'),
   -视图函数重定向,或者模板中写死了路径
   -可以用反向解析来动态生成路径
   -视图层:(有参数)
    -url=reverse('test',args=(参数一,参数二,))
   -模板层:(有参数)
    {%url 'test' 参数一 参数二%}
  六 名称空间
   -路径重命名,可能会重复,反向解析,就会出问题
   -指定名称空间
   -url(r'^author_update/',include('子路由路径',namespace='app01')),
   -reverse('app01:test')
  七 django2.0版的path
   -re_path根url一样
   -path是准确路径
   -5个转换器:int,str,slug,path,uuid
   -自定义转换器
    class Test:
     regex='正则'
     def to_python(self,value):
      逻辑处理
      return value
     def to_url(self,value)
      return '%04d'%value
   -使用:
    -register_converter(converters.FourDigitYearConverter, 'yyyy')
    -<yyy:year>
  八 伪静态:
 8 视图层
  -请求
   -request对象:POST,GET(post提交数据,浏览器地址栏,也可以携带参数),method(大写),body(post提交的所有数据),path(路径),get_full_paht()-->(全路径,包含数据),FILES(前台传过来的文件,它是一个字典),META
  -响应:
   -render,HttpResponse,redirect
   -JsonResponse-->往前台返回一个json格式数据(本质:继承了HttpResponse,封装了json)
   -不能转换列表,想转换,safe=False
   -编码方式
  -cbv和fbv
   基于类的视图cbv
    -路由:url(r'^test/', views.Test.as_view()),
    -视图:
     class Test(View):
      def dispatch(self, request, *args, **kwargs):
       # 加点东西
       # request=request.POST
       response=super().dispatch(request, *args, **kwargs)
       # 加点东西
       return response
      def get(self,request):
       return HttpResponse('get')
   基于函数的视图fbv
        
 9 模版层
  一 模版简介
   渲染页面
  二 模版语法之变量
   -{{ 变量 }}
   -{{深度查询用.}}
  三 模版之过滤器
   -自带过滤器
    {{ 参数|过滤器名字:参数 }}
    -date
    -add
    -length
    -upper
    -lower
   -可以自定义过滤器
  四 模版之标签(都要有结束)
   -{% for %}
    -循环字典:(在模板里,方法不能加括号)
     {% for key,value in 字典.items%}
    -forloop对象:parentloop,last,first,count,count0,revcountcount,revcount0
   -{% if %}
    -跟python if判断一样
    -可以嵌套在for循环中
    -{% elif%}
    -{% else%}
   -{% with%}
    -重命名
  五 自定义标签和过滤器
   -先注册app
   -在app下创建一个templatetags的模块
   -在模块下新建一个py文件
   -from django.template import Library
   -register=Library()------>名字必须叫register
   -标签:
    -用装饰器装饰 @register.simple_tag
   -过滤器
    -用装饰器装饰 @register.filter
   -过滤器最多只能传两个参数,标签可以传多个
   -在模板中使用:
    -{% load py文件名%}
    -{{参数|自定义的过滤器:参数}}----->过滤器
    -{% 自定义的标签名 参数一 参数二 %}----->标签
   
  补充:inclusion_tag 
   -先注册app
   -在app下创建一个templatetags的模块
   -在模块下新建一个py文件
   -from django.template import Library
   -register=Library()------>名字必须叫register
   -使用装饰器:@register.inclusion_tag('test.html')
   -写个函数my_inclusion,返回字典
   -模板里就能取到字典,渲染模板
   -使用:
    在模板中:{%load py文件名%}
    {% my_inclusion 参数%}
  六 模版导入和继承
   -在模板中
    -{% include '模板的名字'%}----->不要再以html开头,结尾了
   -继承
    -写一个母版,留几个盒子
     -{%block 名字%}
      {%endblock%}
    -其他模板继承该母版,扩写盒子
     {%extends '母版名字'%}
     {%block 名字%}
     写内容
     {%endblock%}
    -block.super--->可以显式盒子中原来有的东西
    -多个盒子,跟写的位置无关
  七 静态文件相关
   - 基本配置<link rel="stylesheet" href="/static/mycss.css">
   -static配置:
    -{%load static%}
    -{% static 'mycss.css'%}
    -<link rel="stylesheet" href="{% static 'mycss.css'%}">
   -get_static_prefix配置
   -{% load static %}
   -<link rel="stylesheet" href="{% get_static_prefix %}mycss.css">
   
 10 模型层
  -单表操作
   -增:两种方式,create,对象.save()
   -删:两种方式:queryset,对象都要删除方法
   -修改:queryset的update方法,对象修改--->没有update,用save
   -查:
    -查询api
    -模糊查询:基于双下划线
  -多表操作
   -增加:
    一对一:authordetail=对象----authordetail_id=id
    一对多:可以传对象,可以传id
    多对多:
     -add,remove,
      -*args--可以传对象,可以传id
     -clear()清空所有
     -set
      -传一个可迭代对象(可以传对象,可以传id)
   -删除:如果设置了级联删除,就会级联删除
   -查询
    -正向:关联字段在那个表,从哪个表往外查,是正向
    -反向:反过来
    -基于对象
     -正向按字段
     -反向
      -一对一 :表名小写
      -其他:表名小写_set
     -子查询,多条查询
    -基于双下划线
     -核心:__连表
     -聚合:Count,Sum,Max.... aggregate
     -分组:annotate
      -总结:
       value在前表示group by,在后,表示取值
       filter在前,表示where,在后,表示having
     -F函数,Q函数
      -F函数,因为等号后面不能传字段,所以用F函数包裹一下
      -Q函数:表示与&  或|   非~  关系
  -常用,非常用字段
   -常用的记住,非常用的知道
   -dateField类型:auto_now和auto_add_now
  常用参数:
   -级联删除:2.0以后,必须显示指定
   -唯一性
   -索引
  元信息:
   -重名名表名
   -联合索引
   -联合唯一
补充事务:
 from django.db import transaction
 with transaction.atomic():
  # 两条create
  pass
补充choice:
 -在模型表中定义mychoice=((1,'男'),(2,'女'),(3,'其他'))
 -在字段上用:dd = models.IntegerField(choices=mychoice)
 -取对应的文字:
  -在视图层:(get_字段名_display())
   sex=author.get_dd_display()
   
补充defer和only(数据库优化)
 only:只取我指定的字段,返回值是queryset里套对象,只是对象里只有指定的字段
 defer:反过来

Django基础回顾与补充(79-80)的更多相关文章

  1. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  2. django基础回顾

    1,web项目工作流程 1.1 了解web程序工作流程 1.2 django生命周期2,django介绍 目的:了解Django框架的作用和特点 作用: 简便.快速的开发数据库驱动的网站 Django ...

  3. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  4. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  5. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)   Django基础七之 ...

  6. Django【查询】 基础回顾与深入应用

    官方Django3.2 文档:https://docs.djangoproject.com/en/3.2/topics/db/queries/ 本文大部分内容参考官方3.2版本文档撰写,仅供学习使用 ...

  7. 基于Django的Disqus如何支持每月80亿PV(转)

    原文:基于Django的Disqus如何支持每月80亿PV 本文由 伯乐在线 - 贱圣OMG 翻译.未经许可,禁止转载!英文出处:Matt Robenolt.欢迎加入翻译小组. 现在我们Disqus能 ...

  8. Django基础(一):基础引用

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  9. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

随机推荐

  1. 测试那些事儿—软测必备的Linux知识(四)

    1.文件权限管理 ls -l 显示的内容如下: 10个字符确定不同用户能对文件干什么 第一个字符:-表示文件,d表示目录,l表示链接 其余字符每3个一组(rwx),r-读,w-写,x-执行 第一组rw ...

  2. JavaScript 运动(缓冲运动,多物体运动 ,多物体多值运动+回调机制)

    匀速运动   (当需要物体做匀速运动直接调用statMove函数) function startMove(dom,targetPosetion){ //dom : 运动对象,targetPositio ...

  3. 设计简单的VB程序

    1.模拟对话程序 [程序源码] Option Explicit Private Sub Command1_Click() Text2.Text = "" Text1.Text = ...

  4. Qt 学习-----helloword

    (参考:http://www.qter.org/portal.php?mod=view&aid=27&page=3) 1. 打开“文件→新建文件或项目”菜单项(也可以直接按下Ctrl+ ...

  5. css3实现条纹以及方格斜纹背景

    CSS代码: .stripes { height: 250px; width: 375px; float: left; margin: 10px; -webkit-background-size: 5 ...

  6. Python 特殊方法

    1 _int_ 定义在类中,创建类的实例的时候回先调用此方法,用于对该类的一些初始化(例如变量初始化) 2 _str_ def _str_(self): return "this is a ...

  7. 安装了低版本Jdk后eclipse无法打开的终极解决方法

    环境jdk1.7.0_17,eclipse oxygen(2017年6月发布) 因为之前安装的是jdk1.8.0_144,所以eclipse的相关配置都修改成了jdk1.8的版本,然而,近期因为某些原 ...

  8. zoj 1649 bfs

    Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M ...

  9. 2018.5.11 B树总结

    小结 B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于 走右结点: B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键 字范围的子结点: 所有关键字在整颗 ...

  10. C#服务端Web Api

    本教程已经录制视频,欢迎大家观看我在CSDN学院录制的课程:http://edu.csdn.net/lecturer/944