1. 程式人生 > >python之Django的入門05

python之Django的入門05

我們接著上一篇文章的基礎上,來繼續瞭解進一步的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包住需要呼叫的函式,實現不登陸不能呼叫函式的功能