上一篇文章鏈接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包住需要調用的函數,實現不登陸不能調用函數的功能