为了避免做广告的嫌疑,以后会把熙鱿记3个字去掉了。
现在我们完善登陆和注册功能。
首先,我们要为站点创建一个超级用户python manage.py createsuperuser
然后根据命令行提示输入用户名、邮箱和密码。
导入app
前面我们新建了两个app, 如果要让django找到你的app, 需要在ahead/settings/__init__.py
INSTALLED_APPS 里添加 ‘guys’, ‘shops’.
添加URL
在ahead.urls
里添加url(r'^', include('guys.urls')),url(r'^', include('shops.urls')),
这样就可以在guys和shops里的urls.py设置url了。这就是我喜欢python的设计,大多数的python框架都是以一个app为单位,这样程序的复用性是非常高的,之前写的论坛模块在其他站点都可以直接使用,不像php和ruby的框架,都放在一个controllers里。
用户登录注册我们放在guys里,所以我们在guys/urls.py里的代码
# -*- 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. 登录
登陆
登陆我们使用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,就是这么简单方便,又不失灵活性。退出
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'),