简单的例子:用户输入用户名和密码后登录系统,这里暂时不连接数据库。系统验证登录成功,直接跳转到百度的首页。登录失败,系统会将错误信息打印在页面上。
1. 登录模板
模板中需要写个简单的登录表单,如下面的:
<form action="/login/" method="POST" name="loginForm">
<div class="form-group">
<label for="name">用户名</label> <input type="text" class="form-control" name="username" placeholder="请输入用户名">
</div>
<div class="form-group">
<label for="">密码</label> <input type="password" class="form-control" name="pwd" placeholder="请输入密码">
<div style="color: red;font-weight: bold">{{ msg }}</div>
</div>
<button type="submit" class="btn btn-primary" onclick="return checkForm()">登录</button>
</form>
模板中的 {{ msg }}
,
2. 登录逻辑
from django.urls import path
from django.shortcuts import HttpResponse, render, redirect
def login(request): #
'''
处理用户请求,返回相响应结果
:param request:用户请求的相关信息(不是字节,是对象)
:return:
'''
if request.method == 'GET':
return render(request, 'login.html') # 本质上是调用HttpResponse,自动找到login.html文件,读取内容并返回给用户
else:
# print(request.POST) # 用户POST提交的数据(请求体)<QueryDict: {'name': ['thanlon'], 'pwd': ['123']}>
# user = request.POST['username']#直接索引,如果没有username会报错
username = request.POST.get('username') # 如果没有username不会报错,返回None
pwd = request.POST.get('pwd') # 如果没有username不会报错,返回None
if username == 'thanlon' and pwd == '123456':
return redirect('https://www.blueflags.cn')
else:
return render(request, 'login.html', {'msg': '用户名或密码错误!'}) # django内部做模板渲染
urlpatterns = [
# path('admin/', admin.site.urls),
path('login/', login),
]
3. 结论
用户名和密码输入正确后,则登录成功跳转百度首页。否则,登录失败系统会将错误信息放到登录模板,然后传给用户。表现上是刷新表单界面,显示提示信息: