首页 > 技术文章 > Django初识模板语言

meihan 2020-03-10 15:15 原文

跨站请求伪造

我们请求的数据提交到哪里呢?

 

     <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初始化是空字符串,如果有错误的话,就会有提示。

 

推荐阅读