Django1.7开发官网(二)

为了避免做广告的嫌疑,以后会把熙鱿记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)
  1. 注册
    删掉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. 登录

  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,就是这么简单方便,又不失灵活性。

  3. 退出
    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'),
    
    原文作者:西镇精魂
    原文地址: https://segmentfault.com/a/1190000000718152
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞