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包住需要調用的函數,實現不登陸不能調用函數的功能
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章