python之Django的入門05
阿新 • • 發佈:2018-12-14
我們接著上一篇文章的基礎上,來繼續瞭解進一步的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包住需要呼叫的函式,實現不登陸不能呼叫函式的功能