1、认识http请求
django视图中的request(包含了请求信息的请求对象)
请求的方式
- get
- 默认页面的请求方式 是 get请求,在web中使用最频繁的请求方式
- 请求服务器资源,可以携带参数,参数写在url中,不安全,发爬能力弱
- https://www.baidu.com/s?wd=world&name=zhangsan
- 参数 从 ?开始,多个参数使用 &
- 参数是以 key=value
- 以&进行分割
- post
- 向服务器提供资源,数据包含在请求体当中,隐藏传递,安全性比get请求高,传输数据的量比get请求大
响应码
-
100 服务器收到请求,需要用户继续操作,例如:发出请求,但是需要用户继续输入密码
101 根据客户端需求转换协议
200 请求成功,服务器成功处理了请求
202 请求已经被接受,但是还没有处理完
300 请求重定向
303 对应当前的需求需要在另一个url地址中才能找到,客户端通过get请求方式去访问哪个地址
400 客户端错误
403 服务器理解了请求,但是拒绝了用户的请求,CSRF
404 页面找不到
500 服务端错误
502 bad gateway 服务器错误,代理有问题
请求的参数
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验证
2. Django的form表单请求
form表单
form 创建一个表单域
input select
type name value class id
submit button
action 提交的地址
method 提交的方式 get post
form表单 get请求
-
templates 创建html 放 form表单
-
获取数据:获取用户输入数据
-
进行提交: submit 进行提交
-
-
视图
-
接收请求 ,处理请求,返回响应
-
-
路由
-
将视图函数跟路由绑定
-
通过form输入文章标题,搜索文章名字
-
编写html,写一个form表单,提交一个搜索内容
-
视图: get请求参数
-
使用模糊查询,查询文章标题
-
返回查询结果
-
form表单post请求
CSRF
跨站请求伪造攻击,使用当前浏览器还在生效的cookie对指定网站进行操作,最初针对的是银行系统。
模拟一下,qq空间
POST请求
django本身提供对csrf的校验功能,在django 1.4 版本之前 是需要手动开启,
在django的所有的post请求,都会在请求之初,给用户下发一个串用来校验身份的编码,并且每次请求下发的串都不一样,django的csrf 只针对post请求
django当中使用csrf的步骤
-
在settings文件中打开csrf相关验证
-
在视图中返回页面,需要使用render(render_to_response),render第一个参数 是请求对象(request)如果不返回这个request,前端没法使用{% csrf_token %}
-
在模板中的form表单域中添加 {% csrf_token %} 这个标签实际上 隐藏域,
name是csrfmiddlewaretoken
value是 csrf 校验的值
POST完成用户注册
目标: 通过前端提交用户名,密码,后端收到数据,保存数据库
-
完成模型的创建
创建一个user表,字段 :用户名,密码
数据迁移
2、模板
form表单,post请求
3、视图
接收post请求参数
def register(request):
if request.method == "POST":
# 获取用户输入的数据
username = request.POST.get("username")
password= request.POST.get("password")
password2 = request.POST.get("password2")
## 判断是否有数据
content = "参数不全"
if username and password2 and password:
## 判断密码是否相等
if password != password2:
# return ''
print ("两次密码不一样")
content="两次密码不一样"
else:
## 保存数据
user = User()
user.name = username
user.password = password
user.save()
content = "添加成功"
return render(request,"register.html",locals())
密码密文
加密: md5 不可逆的加密 通过md5实现密码加密