Django项目——注册功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/84866075

一  注册页面的 URL 模式

# -*- coding: utf-8 -*-

from django.conf.urls import url
# 导入views中login
from django.contrib.auth.views import login

from . import views

'''
1 第一个url解析
登录页面的 URL 模式与 URL http://localhost:8000/users/login/ 匹配。
这个 URL 中的单词 users 让 Django 在 users/urls.py 中查找,而单词login 让它将请求发送给 Django 默认视图 login
(注意,视图实参为 login ,而不是 views.login )。
鉴于我们没有编写自己的视图函数,我们传递了一个字典,告诉 Django去哪里查找我们将编写的模板。
这个模板包含在应用程序 users 而不是 learning_logs 中。
2 第二个url解析
注销 URL 模式,该模式与 URL http://locallwst:8000/users/logout/ 匹配。
URL 模式将请求发送给函数 logout_view() 。
这样给这个函数命名,旨在将其与我们将在其中调用的函数 logout() 区分开来
3 第三个url解析
这个模式与 URL http://localhost:8000/users/register/ 匹配,并将请求发送给我们即将编写的函数 register()
'''
urlpatterns = [
    # 登录页面.
    url(r'^login/$', login, {'template_name': 'users/login.html'},
        name='login'),
        
    # 注销.
    url(r'^logout/$', views.logout_view, name='logout'),
    
    # 注册页面.
    url(r'^register/$', views.register, name='register'),
]

二 视图函数 register

# -*- coding: utf-8 -*-
'''
我们首先导入了函数 render() ,然后导入了函数 login() 和 authenticate() ,
以便在用户正确地填写了注册信息时让其自动登录。我们还导入了默认表单 UserCreationForm 。
'''
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
# 从 django.contrib.auth 中导入了函数 logout()
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.forms import UserCreationForm

def logout_view(request):
    """ 注销用户 """
    # 调用了函数 logout() ,它要求将 request 对象作为实参。
    logout(request)
    # 我们重定向到主页
    return HttpResponseRedirect(reverse('learning_logs:index'))

def register(request):
    """在注册页面首次被请求时,视图函数 register() 需要显示一个空的注册表单,
    并在用户提交填写好的注册表单时对其进行处理。
    如果注册成功,这个函数还需让用户自动登录。"""
    if request.method != 'POST':
        #  显示空的注册表单.
        form = UserCreationForm()
    else:
        #  根据提交的数据创建一个 UserCreationForm 实例
        form = UserCreationForm(data=request.POST)
        # 检查这些数据是否有效:就这里而言,是用户名未包含非法字符,输入的两
        # 个密码相同,以及用户没有试图做恶意的事情。
        if form.is_valid():
            # 表单的方法 save() ,将用户名和密码的散列值保存到数据库中
            # 方法 save() 返回新创建的用户对象,我们将其存储在 new_user
            new_user = form.save()
            # L 让用户自动登录,再重定向到主页
            authenticated_user = authenticate(username=new_user.username,
                password=request.POST['password1'])
            login(request, authenticated_user)
            return HttpResponseRedirect(reverse('learning_logs:index'))

    context = {'form': form}
    return render(request, 'users/register.html', context)

三 注册模板

{% extends "learning_logs/base.html" %}

{% block content %}
  <!--这里也使用了方法 as_p ,让 Django 在表单中正确地显示所有的字段,包括错误消息 —— 如果用户没有正确地填写表单。-->
  <form method="post" action="{% url 'users:register' %}">
    {% csrf_token %}
    {{ form.as_p }}
        
    <button name="submit">注册</button>
    <input type="hidden" name="next" value="{% url 'learning_logs:index' %}" />
  </form>
    
{% endblock content %}

四  链接到注册页面

<p>
  <a href="{% url 'learning_logs:index' %}">学习笔记</a> -
  <a href="{% url 'learning_logs:topics' %}">主题</a> -
  <!--在 Django 身份验证系统中,每个模板都可使用变量 user ,
  这个变量有一个 is_authenticated 属性:如果用户已登录,
  该属性将为 True ,否则为 False 。-->
  {% if user.is_authenticated %}
  <!--对于已通过身份验证的用户,还设置了属性 username ,
  我们使用这个属性来个性化问候语,让用户知道他已登录-->
    你好, {{ user.username }}.
  <!-- 使得仅当用户登录后才能看到它-->
    <a href="{% url 'users:logout' %}">退出</a>
  {% else %}
  <!--已登录的用户看到的是个性化的问候语和注销链接,而未登录的用户看到的是注册链接和登录链接。-->
    <a href="{% url 'users:register' %}">注册</a> -
    <a href="{% url 'users:login' %}">登录</a>
  {% endif %}
</p>

{% block content %}{% endblock %}

五 测试

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/84866075