跨站请求伪造
我们请求的数据提交到哪里呢?
<form action="login" method="post"> <p> <label for="username">用户名:</label> <input id="username" type="text"> </p> <p> <label for="pwd">密码:</label> <input id="pwd" type="pwd"> </p> <p> <input type="submit" value="提交"> </p> </form>
请求连接action="login"提交到这个url里 http://127.0.0.1:8001/login/
反复提交会报错,CSRF verification failed. Request aborted.
会遇到CSRF的认证,这个我们到后面再说
应对方法,注销掉setting里的这句话,
注销后再点【提交】页面刷新没有报错了
如何区分用户的请求POST还是get
客户端通过浏览器给服务端发送请求,发请求的时候会把默认的浏览器的信息都会发给服务器,请求方式,用什么浏览器,IP等等
服务器拿到信息后去里面获取内容就可以了。
view.py处理用户发来的请求
html提交的请求
def login(request): return render(request,"login.html")
这个方法处理的是提交过来的数据,但是并没有真正对提交的数据进行处理,
django和wsgi将用户的请求打包发给我们 ,参数request包含了用户的所有的请求数据。
一个登录请求
获取用户发过来的用户名密码
我们需要在模板的input标签中添加name属性,然后后台通过字典的形式获取你的用户名密码。模板代码如下:
<form action="login" method="post"> <p> <label for="username">用户名:</label> <input id="username" name="username" type="text"> </p> <p> <label for="pwd">密码:</label> <input id="pwd" name="pwd" type="pwd"> </p> <p> <input type="submit" value="提交"> </p> </form>
我们在后台获取,注意了:request.POST封装了所有post方法发过来的请求。
def login(request): #获取客户端请求的方法 if request.method == "POST": #获取用户名密码 user_name = request.POST.get("username",None) password = request.POST.get("pwd",None) print(user_name,password) return render(request,"login.html")
页面校验后跳转
说明:用redirect做重定向跳转到别的页面
from django.shortcuts import render from django.shortcuts import redirect #做重定向跳转使用 def login(request): error_msg = "" if request.method == "POST": user_name = request.POST.get("username",None) password = request.POST.get("pwd",None) if user_name == "root" and password == "123": return redirect("http://www.baidu.com") #调转到百度 else: error_msg = "用户名或者密码错误" return render(request,"login.html",{'error_msg':error_msg})
在模板中设置变量
说明:在模板中用对应的{ { 变量名 } } 设置,来获取后台的值。
这边注意了,span标签,中间没有值的话,在前端页面是不显示的,所以在error_msg初始化是空字符串,如果有错误的话,就会有提示。