上一篇文章链接Django04
我们接着上一篇文章的基础上,来继续了解进一步的Django框架
1.反向解析与正向解析:
1.1正向解析:
正向解析就是urls里面正则匹配到,然后调用相应视图函数,是一种映射方法
user的urls:
url(r'^show$',show,name='show'),
user的views:
def show(request):
return render(request,'fan1.html')
templates 里面创建一个fan1.html页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
一般
<a href="/user/fan1">fan1</a>
反向解析
<a href="{% url 'user:fan2' %}">fan2</a>
</body>
</html>
通过在网页地址栏添加127.0.0.1:8000/user/show 可以找到fan1这个页面,这个就是正向解析,有固定的正则表达式。
1.2反向解析:
在项目同名文件夹下面的urls里面配置姓:
url(r'^user/', include('user.urls',namespace='user')), #namespace是姓名的姓,实现反向解析需要的
在user的urls里面:
url(r'^fan1$',fan1,name='fan2'), #name就是姓名的名
user的views里面:
def fan1(request):
return HttpResponse('fan')
在这个时候进入show页面,页面的一般(超链接)与反向解析(超链接),点击进去都是指向fan1函数,返回的都是fan。这个就是反向解析,一般使用它来动态生成正则表达式。
2.登录功能的实现:
在登录页面的form表单设置action和method:
<form action="{% url 'user:register_log' %}" method="post">
#当form表单提交时会转入反向解析user : register_log 这个映射路径
user的urls里面:
url(r'^register_log$',register_log,name='register_log'),
user的views:
'''登录模块'''
def register_log(request):
objs = request.POST #接收表单提交的数据
username = objs['username']
password = objs['password']
yzm = objs['yzm']
#校验用户名、密码、和验证码是否正确
user_mysql = UserInfo.objects.get(username=username) #数据库里找到用户名相同的对象
password_mysql = user_mysql.password #找到对象的密码
password_panduan=check_password(password,password_mysql) #检查密码与加密后的密码是否是同一个,正确返回True,错误返回False
if password_panduan is not True:
return HttpResponse('密码错误')
if yzm.upper() != request.session['verifycode']: #如果a的大写化等于验证码
return HttpResponse('验证码错误')
#校验username 和 password
user = authenticate(username=username, password=password)
if user is not None and user.is_active==1:
#登陆,并在cookie里有缓存
login(request, user)
request.session['username'] = user.username
# print('111122222')
# print(request.session.get('username', '老1'))
# print('111122222')
response = redirect(reverse('car:index'))
response.set_cookie('username',username)
# response.delete_cookie('username')
return response
else:
return HttpResponse('登陆失败')
3.注销功能的实现:
主页添加一个‘注销’超链接:
<a href="/user/register_logout">注销</a>
user的urls里面:
url(r'^register_logout$',register_logout,name='register_logout'),
user的views里面:
'''注销'''
def register_logout(request):
# print(request.session.get('username', '老2'))
logout(request)
# print(request.session.get('username', '老3'))
return render(request,'index.html')
-
验证是否已经登录:
在user模块的urls里面: from django.contrib.auth.decorators import login_required url(r'^user_info$',login_required(User_Info.as_view()),name='user_info'), #login_required包住需要调用的函数,实现不登陆不能调用函数的功能