爲了不作廣告的嫌疑,之後會把熙魷記3個字去掉了。php
如今咱們完善登錄和註冊功能。html
首先,咱們要爲站點建立一個超級用戶python manage.py createsuperuser
而後根據命令行提示輸入用戶名、郵箱和密碼。python
前面咱們新建了兩個app, 若是要讓django找到你的app, 須要在ahead/settings/__init__.py
INSTALLED_APPS 裏添加 'guys', 'shops'.django
在ahead.urls
裏添加url(r'^', include('guys.urls')),url(r'^', include('shops.urls')),
這樣就能夠在guys和shops裏的urls.py設置url了。這就是我喜歡python的設計,大多數的python框架都是以一個app爲單位,這樣程序的複用性是很是高的,以前寫的論壇模塊在其餘站點均可以直接使用,不像php和ruby的框架,都放在一個controllers裏。ruby
用戶登陸註冊咱們放在guys裏,因此咱們在guys/urls.py裏的代碼app
# -*- coding: utf-8 -*- from django.conf.urls import patterns, url from guys.views.accounts import RegisterView urlpatterns = patterns('', url(r'^whatsup/$', 'django.contrib.auth.views.login', name='login'), url(r'^seeyou/$', 'guys.views.accounts.logout', name='logout'), url(r'^welcome/$', RegisterView.as_view(), name='register'), ) 接下來,咱們要在配置文件裏添加 LOGIN_REDIRECT_URL = "home" # 登錄後跳轉的頁面 LOGIN_URL = "login" # 登錄的url連接 (http://host/whatsup) LOGOUT_URL = "logout" # 退出的url連接 (http://host/seeyou)
註冊
刪掉guys/views.py,新建guys/views/文件夾,我的習慣,我不太喜歡把全部的邏輯都放在一個views文件裏。在guys/views/__init__.py和guys/views/accounts.py
用戶註冊的帳戶功能,好比登錄註冊退出修改密碼等都在accounts.py裏實現。
註冊功能,忽然想用Django的Class-based views實現框架
# -*- coding: utf-8 -*- from django.views.generic import View from django.contrib.auth.views import logout_then_login from ahead.utils.lazy import * from django.contrib.auth.forms import RegisterForm class RegisterView(View): def get(self, request): form = RegisterForm() return render(request, "registration/register.html", {'form': form}) def post(self, request): form = RegisterForm(request.POST) if form.is_valid(): pass return render(request, "registration/login.html", {'form': form})
Django自帶的認證模塊,模板都放在templates/registation目錄下,若是你須要自定義html頁面的話在ahead/templates/下新建一個registation目錄,而後新建login.html。 2. 登陸post
登錄
登錄咱們使用Django自帶的模塊,Django的驗證模塊html頁面放在templates/registration/login.html
若是咱們想要重寫html頁面,只須要在ahead/templates/下新建一個registration目錄,而後再目錄下新建一個login.html就能夠覆蓋掉系統自帶的login.html。而後咱們能夠在login.html裏輸入{{ form }}
試一下。
若是你想快速獲得一個登陸功能,直接在url裏添加url(r'^whatsup/$', 'django.contrib.auth.views.login', name='login'),
無需多寫一行代碼,就能夠直接使用。Django,就是這麼簡單方便,又不失靈活性。url
退出
1) 直接使用auth view裏的url(r'^seeyou/$', 'django.contrib.auth.views.logout', name='logout'),
退出後返回登錄頁面
2) 也是django自帶的,但個人需求是用戶退出後跳到首頁。命令行
# guys/views/accounts.py from django.contrib.auth.views import logout_then_login def logout(request): return logout_then_login(request, '/') # 第二個參數要跳轉的路徑,若是沒有第二個參數則默認跳轉到登錄頁面 # guys/urls.py urlpatterns裏添加 url(r'^seeyou/$', 'guys.views.accounts.logout', name='logout'),