zoukankan      html  css  js  c++  java
  • 回顾django内容


    回顾:
    1 HTTP协议:(重点)
    -请求
    -请求首行
    -GET /index HTTP/1.1
    -请求头部(在django框架中,可以从META中取出来)
    -key:value------> 分割
    -请求体(post请求发的数据) -----
    -往后台传数据的时候,有编码方式(urlencoded,form-data,json/text)
    -默认urlencoded---->name=lqz&name=18---->从POST中取出
    -form-data---上传文件,数据在body体中的格式---->也从POST中取出
    -json---->从POST中取不出来,只能从body中取出,然后反序列化
    -响应
    -响应首行(用空格区分)
    -HTTP/1.1 200 OK ---
    -响应头
    -key:value
    -响应体
    -html/css/js代码
    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 %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请求生命周期
    详见博客
    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>
    八 伪静态:
    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,返回字典
    -模板里就能取到字典,渲染模板
    -使用:
    在模板中:{%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:反过来



  • 相关阅读:
    Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
    mysql使用instr
    swagger错误:Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body
    java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
    平行四边形
    transition
    transform
    box-shadow
    text-shadow文字阴影
    linear-gradient线性渐变
  • 原文地址:https://www.cnblogs.com/fushaunglin/p/10033483.html
Copyright © 2011-2022 走看看