• python-django(day19)


    - http请求本质
    浏览器(socket客户端):
    2、socket.connect(ip,端口)
    3、socket.send("http://www.baidu.com/index.html")
    规则:http协议
    GET请求:
    “GET /index.html?k1=1&k2=2 Http/1.1 host:www.baidu.com content-type:application/json ”

    POST请求:
    “POST /index.html?k1=1&k2=2 Http/1.1 host:www.baidu.com content-type:application/json username=alex&pwd=123123”

    请求头和请求体使用 分割,前面头,后面是体


    请求头:

    请求体:

    6、获取响应
    响应头,响应体 = data.split(' ')
    响应头与响应头之间用 分割

    7、断开连接

    网站(socket服务端):
    1、服务端运行: 监听ip,端口
    4、字符串 = server.recv()

    头,体=data.split(“ =”)

    request.POST.get()

    5、服务端响应

    conn.send('......')

    响应头:

    响应体:

    7、断开连接


    总结:
    a. Http请求中本质都是字符串
    b. Http请求短连接 (请求,响应,断开连接)
    c. 请求以及响应都有: 头、体
    请求头与请求体之间 分割 请求头下请求头之间用 分割


    - Web框架

    Django本质:
    socket(django用的是别人的模块“wsgiref”)
    解析和封装http请求(*)


    使用Django:
    a.安装
    b.创建项目
    project
    django-admin startproject mysite

    app
    cd mysite
    python manage.py startapp app01

    写代码(******)

    python manage.py runserver ip:port 启动

    视图函数

    def index(request):

    request.GET
    request.body #原生的请求体
    request.POST #如果请求头中: content-type:urlencode-form...... 才将request.body原生内容转换成字典
    -可能有值
    -可能没值(是因为没做转换,可以去看下body有没有值)
    request.method
    request.Meta

    request.GET.get()
    request.GET.getlist() #前端用chkeckbox多选 ,select单选 ,想获取多个值 用getlist
    request.POST

    return HttpResponse(‘字符串/字节’)
    return render(request,'html路径',{})
    return redirect('URL') #返回的是URL,而不是URL对应的html数据

    - 模板

    - 继承
    - 模板语言
    for
    if

    - filter,sample_tag


    - Model 操作
    -创建表:业务线

    - model.xx.objects.create(name='欧美')
    - models.xx.objects.create(**dic)

    -models.xx.objects.filter(id__gt=1).delete()
    -models.xx.objects.filter(id=1).delete()
    -models.xx.objects.exclude(id=1).delete()

    -models.xx.objects.filter(id=1).update(name='ddd')
    -models.xx.objects.filter(id=1).update(**dic)


    创建表:
    业务线
    主机表
    id host port baidu

    # queryset = [对象,对象,。。。]
    objs = models.xx.objects.all()
    for row in objs:
    row.id
    row.host
    row.port
    row.bs.name

    # queryset = [{},{}。。。。。]
    - objs = models.xx.objects.all().values('id','host','port')

    obj = models.xx.objects.filter(user='alex') 得到的是queryset
    obj = models.xx.objects.filter(user='alex').fisrt()得到的是对象,只要是对象就可以.调用属性(字段)

    obj.mm.add(1)
    obj.mm.add(11)


    queryset = obj.mm.all() alex负责的所有业务线 [业务线对象 ,业务线对象]

    二手车业务线由哪些人负责
    obj = models.business_unit.objects.filter(name="二手车").first
    query = obj.userinfo_set.all() #【用户对象,用户对象】


    今日内容:
    1、登录:
    - 密码,加密
    - 用户登录之后,才能访问某些页面

    2、cookie是什么?
    - 保存在客户端浏览器上的键值对 {k:v}
    - cookie依附在请求体或响应头中出现
    - 发送请求时,会自动携带自己网站的cookie (浏览器通过域名或url进行分割对不同网站的cookie)

    - 应用:
    - 实现登录
    - 投票

    - 使用cookie:
    - 设置cookie:

    - 获取cookie

    - cookie超时时间 path='/' 访问指定url时,才能读取到cookie 针对哪些url生效 / 根代表全部
    - domain=None 当前域名或二级域名,默认是自己的当前域名


    3、session
    session是什么?
    保存在服务端的键值对

    ps:依赖cookie

    # 1、生成随机字符串
    # 2、cookie发送给客户端
    # 3、服务端随机字符串作为key,自己设置一些value{}

    在django中内部把上边三步都做了,只需要下面一条命令就可以
    request.session['yyyyyyy'] = user

    session的 key和value存在django.session 数据库表中


    4、CSRF,跨站请求伪造

    5、牛逼自定义分页

  • 相关阅读:
    MyBatis之动态SQL
    MyBatis(十一) 嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则
    MyBatis(10)使用association进行分步查询
    MyBatis(九) 使用association定义单个对象的封装规则
    MyBatis(八)联合查询 级联属性封装结果集
    MyBatis(七) 自定义映射结果ResultMap
    基于.NET架构的树形动态报表设计与应用
    Web在线报表设计器使用指南
    计量检测行业业务系统如何实现信息化?
    【ActiveReports 大数据分析报告】2019国庆旅游出行趋势预测
  • 原文地址:https://www.cnblogs.com/zhangmeixia/p/7505028.html
Copyright © 2020-2023  润新知