python全栈开发第十八天(Django 认识http请求,Django的form表单请求, )

认识http请求

django视图中的request(包含了请求信息的请求对象)

请求方式

1、get

  • 默认页面的请求方式 是 get请求,在web中使用最频繁的请求方式
  • 请求服务器资源,可以携带参数,参数写在url中,不安全,反爬能力弱
  • https://www.baidu.com/s?wd=world&name=zhangsan
  • 参数 从 ?开始,多个参数使用 &
  • 参数是以 key=value
  • 以&进行分割

2、post

  • 向服务器提供资源,数据包含在请求体当中,隐藏传递,安全性比get请求高,传输数据的量比get请求大

3、delete
4、options
5、put

6、patch
7、head

响应码

  • 100 服务器收到请求,需要用户继续操作,例如:发出请求,但是需要用户继续输入密码
    • 101 根据客户端需求转换协议
  • 200 请求成功,服务器成功处理了请求
    • 202 请求已经被接受,但是还没有处理完
  • 300 请求重定向
    • 303 对应当前的需求需要在另一个url地址中才能找到,客户端通过get请求方式去访问那个地址
  • 400 客户端错误
    • 403 服务器理解了请求,但是拒绝了用户的请求,CSRF
    • 404 页面找不到
  • 500 服务端错误
    • 502 bad gateway 服务器错误,代理有问题

请求request对象的方法

request.COOKIES       用户身份              *****                     
request.FILES     请求携带的文件,比如图片     ****
request.GET      get请求携带的参数           *****
request.POST     post请求携带的参数          *****
request.scheme    https还是http            ****
request.method   请求的方式                 *****
request.path    请求的路径   				***
request.body    请求的主体,返回的是一个字符串   ***
request.META  包含了具体的请求数据,包含所有的http请求的信息信息
request.META.get('OS')                请求的系统
request.META.get('HTTP_USER_AGENT')   发出请求的浏览器的版本
request.META.get('HTTP_HOST')         请求的主机
request.META.get('HTTP_REFERER')      请求的来源



def reqtest(request):
    ## request包含请求信息的  请求对象
    # print (request)
    print (dir(request))
    # print (request.COOKIES)
    # print (request.FILES)
    print (request.GET)
    print (request.scheme)
    print (request.method)
    print (request.path)
    print (request.body)
    # meta = request.META
    # print (meta)
    # for key in meta:
    #     print(key)
    # print ("_____")
    # print (request.META.get('OS'))
    # print (request.META.get('HTTP_USER_AGENT'))
    # print (request.META.get('HTTP_HOST'))
    # print (request.META.get('HTTP_REFERER'))

    return HttpResponse("请求测试")

获取请求传递的参数

get 和post请求 获取参数

def reqtest(request):
    ## 获取get请求传递的参数
    # data = request.GET
    ## 获取post 的请求参数
    data = request.POST
    print (data)
    print (data.get("name"))
    print (type(data.get("name")))
    print (data.get("age"))

    return HttpResponse("姓名:%s年龄%s" %(data.get("name"),data.get("age")))

发送post请求的时候,会报403(csrf)解决方案:在settings文件的中间件中将csrf验证注掉
django自动开启了csrf验证
注意:一般不用这样的方式,可以再前端页面加上{% csrf_token%}
在这里插入图片描述

Django的form表单请求

form表单

form 创建一个表单域

input select

type name value class id

submit button

action 提交的地址

method 提交的方式 get post

form表单 get请求

  • templates 创建html 放 form表单
    • 获取数据:获取用户输入数据
    • 进行提交: submit 进行提交
  • 视图
    • 接收请求 ,处理请求,返回响应
  • 路由
    • 将视图函数跟路由绑定
      在这里插入图片描述
      例子:通过form输入文章标题,搜索文章名字
  1. 编写html,写一个form表单,提交一个搜索内容
  2. 视图: get请求参数
    . 使用模糊查询,查询文章标题
    . 返回查询结果

在这里插入图片描述

form表单 post请求

CSRF 跨站请求伪造
跨站请求伪造攻击,使用当前浏览器还在生效的cookie对指定网站进行操作,最初针对的是银行系统。
在这里插入图片描述
POST请求
django本身提供对csrf的校验功能,在django 1.4 版本之前 是需要手动开启,

在django的所有的post请求,都会在请求之初,给用户下发一个串用来校验身份的编码,并且每次请求下发的串都不一样,django的csrf 只针对post请求

django当中使用csrf的步骤

  1. 在settings文件中打开csrf相关验证
  2. 在视图中返回页面,需要使用render(render_to_response),render第一个参数 是请求对象(request)如果不返回这个request,前端没法使用{% csrf_token %}
  3. 在模板中的form表单域中添加 {% csrf_token %} 这个标签实际上 隐藏域,
    name是csrfmiddlewaretoken
    value是 csrf 校验的值
    在这里插入图片描述
    查看前端页面
    在这里插入图片描述

POST完成用户注册

目标: 通过前端提交用户名,密码,后端收到数据,保存数据库

1、完成模型的创建
      创建一个user表,字段 :用户名,密码
在这里插入图片描述
数据迁移

2、模板
form表单,post请求
在这里插入图片描述
3、视图

接收post请求参数

写库
在这里插入图片描述

密码密文

加密: md5 不可逆的加密 通过md5实现密码加密
在这里插入图片描述
在这里插入图片描述

django form 表单类

在这里插入图片描述
1. 定义form表单类
跟模型类相似
在这里插入图片描述
2. 使用form表单类
在这里插入图片描述
form表单类是django定义的,可以自动生成前端form表单代码的一个表单类,已完成大部分校验功能。
常见的样式:
在这里插入图片描述
table样式:
as_table 被闲置,样式跟普通的样式一样,以前的布局使用table布局,现在用的div布局。table没有任何样式

3. 修改table样式

在这里插入图片描述
django提供的form表单类中只提供了样式,没有form表单域,也没有提交按钮,优点:方便开发人员
修改样式。如果要提交,外面包围一个form表单
在这里插入图片描述
修改视图

在这里插入图片描述

使用form表单类进行数据的校验通过字段属性进行校验

在这里插入图片描述

form表单类,虽然能够完成前端校验,但是不用,form类经常被用来做后端校验

4. 使用form表单类进行后端验证

模板

在这里插入图片描述
视图
在这里插入图片描述
form表单类
在这里插入图片描述
步骤
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值