赞
踩
新增templates/home/success.html,用来渲染成功信息:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>成功</title>
</head>
<body>
<h1>成功</h1>
</body>
</html>
新增templates/home/login.html,用来渲染登录页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <h1>用户登录</h1> <form action="/login/" method="post"> {% csrf_token %} <div> <label for="username">用户名</label> <input id="username" name="username" type="text"> </div> <div> <label for="password">密码</label> <input id="password" name="password" type="password"> </div> {% if err_msg %} <p style="color: red">{{ err_msg }}</p> {% endif %} <div> <input type="submit" value="登录"> </div> </form> </body> </html>
<form action="/login/" method="post">
这行代码表明,当点击登录按钮的时候,跳转到后端的 /login/
路由,也就是home中叫做 login/
的path,使用的请求方法是POST方法。
{% csrf_token %}
这行代码表明,当前登录表单支持防止CSRF跨站请求攻击。这是Django内置的一种用来提高网站安全性能的技术,在每个表单的第一行,都应该加上。
<div>
<label for="username">用户名</label>
<input id="username" name="username" type="text">
</div>
<div>
<label for="password">密码</label>
<input id="password" name="password" type="password">
</div>
这几行代码提供了一个用于输入用户名和密码的输入框。
{% if err_msg %}
<p style="color: red">{{ err_msg }}</p>
{% endif %}
这几行代码使用了Django的条件渲染的技术。表示如果后端传过来了err_msg的变量,则将这个变量的内容以红色字体渲染到页面中。
def success(request):
return render(request, "home/success.html")
path('success/', views.success),
def login(request):
err_msg = ""
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
if username == "zhangdapeng" and password == "zhangdapeng520":
return redirect("/success")
err_msg = "用户名或密码错误"
return render(request, "home/login.html", {"err_msg": err_msg})
这几行代码表明,如果是POST请求,则获取用户名和密码进行校验。校验成功在重定向到 /success 成功页面,否则设置错误信息。
如果是其他请求或者校验没有成功,则重新渲染登录页面。
path('login/', views.login)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。