day74

回顾:
 1 HTTP协议:(重点)
    -请求
       -请求首行
          -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中取出,然后反序列化
     -响应
       -响应首行(用空格区分)
          -HTTP/1.1 200 OK   ---\r\n    
       -响应头
          -key:value
       -响应体
          -html/css/js代码
    -特点
       1.基于TCP/IP协议之上的应用层协议
       2.基于请求-响应模式
       3.无状态保护(自身不举报保存之前发送过的请求和响应的功能,但是可以引入cookie技术)
       4.无连接(服务器处理完客户的请求,并收到客户的应答后,立即断开链接)
 2 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()
 3 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()
   
 4 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
  
  
 5 mvc和mtv
    -django 是mtv模式:
       -M:model   ---->模型
       -T:Template  --->模板
       -V:view    ---->视图
    -mvc模式:
       -M:model---->模型,数据库相关
       -v:view----->模板---->页面相关
       -C:controller--->控制器:url+view
    本质上:MTV就是MVC
   
 6 Django请求生命周期
    浏览器==》==》Web服务器==》中间件==》路由层==》(模板层和视图函数)处理之后通过Web服务器返回给路由器
 7 路由层
    一 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>
    八 伪静态:
       在页面后面加上.html加成一个静态页面(动态页面:页面上的内容可以随着数据改变而改变)
 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
       基于类的视图
          -路由: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')
       基于函数的视图
        
 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,返回字典
       例:
        @register.inclusion_tag('testpage.html')
        def inlusion(x):
             ll = ['第%s页' % i for i in range(x)]
             return {'ss': ll}
       -模板里就能取到字典,渲染模板
       -使用:
        在模板中:{%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:反过来
    

转载于:https://www.cnblogs.com/yaoxiaofeng/p/9973680.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值