python之Django的入门05------反向解析和登录注销功能

上一篇文章链接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')
  1. 验证是否已经登录:

     在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包住需要调用的函数,实现不登陆不能调用函数的功能
    

猜你喜欢

转载自blog.csdn.net/sui_yi123/article/details/82967560