• Django之知识总结


    1. 课程介绍
    - 数据类型
    - 函数
    - 面向对象三大特性:继承,封装,多态
    - socket:本质传输字节;所有网络通信都基于socket
    - 数据库设计:单表、FK、M2M (自己作业:自己领域设计表,相亲网站)
    - 会用:html/css/js/bootstrap
    2. Http知识

    基于Socket

    浏览器(格式一):
    Web服务器(格式一):


    MySQL客户端(格式二):
    MySQL服务端(格式二):

    本质:
    socket = socket.socket()
    socket.connect((ip,端口))
    socket.sendall(b'87ljas9802jlksjdf098jlksdf09')


    浏览器发送GET请求数据格式:
    socket = socket.socket()
    socket.connect((ip,端口))
    socket.sendall(b'GET /index/?name=xxx&age=11 http1.1 Accept:text/html Accept-Encoding:gzip, deflate Cookie:UM_distinctid=15d274 ')

    request.GET.get('name')

    浏览器发送POST请求数据格式:
    socket = socket.socket()
    socket.connect((ip,端口))
    socket.sendall(b'POST /index/?name=xxx&age=11 http1.1 Accept:text/html Accept-Encoding:gzip, deflate Cookie:UM_distinctid=15d274 a1=123&a2=666&a3=xx')

    Django加工POST请求的数据,
    判断用户是否传递的是Django可以向request.POST中解析的数据?读取请求头Content-Type: application/x-www-form-urlencoded,那么就去解析request.body中的值,放置到request.POST中
    a1=123&a2=666&a3=xx
    request.POST.get('name')
    request.body b"a1=123&a2=666&a3=xx"

    Django加工POST请求的数据:{a1:123,a2:567}
    request.POST 空
    request.body b"{a1:123,a2:567}"

    Http协议
    - 请求头和请求体分割:
    - 请求体之间:
    - GET无请求体
    - 无状态,短连接:socket请求响应断开
    - 请求头代表的意义
    - user-agent:来源
    - referer: 防盗链
    - content-type:请求体是什么格式?

    3. Django请求生命周期

    wsgiref:
    函数版本:
    from wsgiref.simple_server import make_server

    def run_server(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]


    if __name__ == '__main__':
    httpd = make_server('127.0.0.1', 8000, run_server) # 请求一旦到来:run_server(..)
    httpd.serve_forever()


    类版本:
    from wsgiref.simple_server import make_server

    class WsgiHandler(object):

    def __call__(self,environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]


    if __name__ == '__main__':
    obj =WsgiHandler()
    httpd = make_server('127.0.0.1', 8000, obj) # 请求一旦到来:obj(..)
    httpd.serve_forever()

    # 类() -> __init__
    # 类()() -> __call__

    生命周期:图


    注意:
    渲染工作在Django中执行完成后,字符串返回给浏览器。
    但是:js,css额外再发一次请求仅获取静态文件


    4. 问题:
    a. TemplateDoesNotExist
    - 写错误
    - 配置
    - 文件夹

    b. 静态文件404
    - 写错误
    - 配置
    - 文件夹


    5. Django所有知识点:
    知识点:
    1. 路由规则
    - /index/ func
    - /d+/ func()
    - /?P<name(d+)>/ func() #有名分组
    - include 用来进行路由的分发 url(r'^blog/', include('blog.urls'))

    - 反向生成URL:#这个不太熟悉
    - {%url ""%}
    - reverse('a1',args=(1,))

    2. 视图函数:
    请求相关:
    request:
    method #看函数获取数据的方法
    GET.get/.getlist 用来获取数据单个数据用get,列表用getlist
    POST #同上
    COOKIES
    #设置是在三次请求中的第二次返回时设置COOKIES
    # obj=redirect("/home/")#给浏览器一个cookie在返回时
    # # obj.set_cookie("is_login",True,20)#设置一个cookie,它是一个字典类型的
    # # obj.set_cookie("username",username)
    # return obj
    获取COOKIES的值
    # is_login=request.COOKIES.get("is_login",None)#判断这个页面是否带着cookie
    删除COOKIES
    response.delete_cookie("cookie_key",path="/",domain=name)
    session
    #设置session值
    request.session["is_login"]=True#设置session值
    request.session["USER"]=username
    获取
    ret=request.session.get("is_login",None)#获取session里面的键值对
    删除session
    # del request.session["IS_LOGON"]#这是删除一个键值对
    request.session.flush()这是删除整条记录
    Django自带的认证系统:
    user=auth.authenticate(username=user,password=pwd)#判断是否在数据库内
    auth.login(request,user)登陆的语法
    User.objects.create_user(username=user,password=pwd)这是创建新用户时的语法
    更改密码操作:


    user request.user获取当前用户的名字
    body 所有的数据都在body里
    request.FILES 获取上传的文件

    响应相关:(三种方法都是字符串)
    render
    HttpResponse
    redirect
    3. 模板语言
    if for 模板的if和for循环
    索引:. 句点符
    执行:不加括号自动执行函数

    filter和simple_tag


    4. ORM操作
    创建表:

    字段:INT,CHA,FK,M2M # 外键的关系
    操作表:(CURD)增删改查
    13操作(13中操作)
    -

    补充:
    filter
    values
    vlaues_list

    all/values/values_list

    __ 了不起的下划线

    正向和反向 #数据的查询正向与反向


    整理:
    - 路由对应关系:

    - 模板继承

    - 模板标记标签:for,if,

    - 返回:
    - HttpResponse
    - render
    - redirect

    - 启动

    - Model类的创建,继承Model

    - migrate

    - 模板自定义函数:filter,sample_tag

    - cookie和Session

    - 基本配置文件:
    - 模板
    - 静态文件
    - MySQL
    和proejct同名的目录的__init__

    - Model中自定义方法:__str__


    - Model操作:
    创建:
    create
    save
    bulk_create
    13中操作:
    filter(nage='xx")
    filter(**{age:18})
    values('id')
    values(*['id','name'])
    values_list
    last
    first
    all
    distict
    exclude
    get
    update(age=11)
    update(**{age:11})
    delete()
    - 多对多查询(查询)

    - URL别名,目的:反向生成URL
    /detail/(d+)/ name = a1

    from django.url import reverse

    url = reverse('a1',args=[6,])


    - Django自带auth验证

    - 模板

    - 分页

    - 分组和聚合
  • 相关阅读:
    从汇编的角度看待const与#define
    从汇编的角度看待变量类型与sizeof的机制
    按字节对齐分析
    堆内存和栈内存的探索
    string源码实现分析
    string源码分析 ——转载 http://blogs.360.cn/360cloud/2012/11/26/linux-gcc-stl-string-in-depth/
    开始了
    atoi函数的实现——面试
    new与malloc的区别,以及内存分配浅析
    [C]C语言中EOF是什么意思?
  • 原文地址:https://www.cnblogs.com/1a2a/p/7780582.html
Copyright © 2020-2023  润新知