欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Web应用程序1.4——创建用户账户

程序员文章站 2022-07-15 08:06:29
...

一.应用程序users

我们首先使用命令startapp来创建一个名为users的应用程序。

Web应用程序1.4——创建用户账户

Web应用程序1.4——创建用户账户

1.将应用程序users添加到settings.py中

--snip--
INSTALLED_APPS = [
    #我的应用程序
    'learning_logs',
    'users',
]
--snip--

2.包含应用程序users的URL

urls.py

from django.conf.urls import include,url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^users/',include('users.urls',namespace='users')),
    url(r'',include('learning_logs.urls',namespace='learning_logs')),]

我们添加一行代码,这行代码与任何单词users打头的URL(如http://localhost:8000/users/login/)都匹配。

二、登录网页

在目录learning_log/users中创建一个名为urls.py的文件并添加如下代码:

urls.py

"""为应用程序users定义URL模式"""

from django.conf.urls import url
from django.contrib.auth.views import login

from . import views

urlpatterns=[
    #登录页面
    url(r'^login/$',login,{'template_name':'users/login.html'},
        name='login'),]

我们首先导入默认视图login,登陆页面的URL模式与URL  http://localhost:8000/users/login/匹配,在URL中单词users让Django在users/urls.py中查找,而单词login让它请求发送给Django默认视图login。我们传递一个字典,告诉Django去哪里查找我们将编写的模板。

1.模板login.html

login.html

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

{% block content %}
  
  {% if form.errors %}
  <p>Your username and password didn't match.Please try again.</p>
  {% endif %}
  
  <form method="post" action="{% url 'users:login' %}">
  {% csrf_token %}
  {{ form.as_p }}
  
  <button name="submit">log in</button>
  <input type="hidden" name="next" value="{% url 'learning_logs:index' %}" />
  </form>
  {% endblock content %} 

2.链接到登录页面

base.html

<p>
	<a herf="{% url 'learning_logs:index'%}">Learning Log</a> -
	<a herf="{% url 'learning_logs:topics'%}">Topics</a> -
	{% if user.is_authenticated %}
	  Hello,{{ user.username }}.
	{% else %}
	  <a href="{% url 'users:login' %}">log in</a>
	{% endif %}
</p>

{% block content %}{% endblock content %}
	

在Django身份验证系统中,每个模板都可使用users变量,这个变量有一个属性is_authenticated:如果用户已登录,概述行为True,否则为False。

3.使用登录页面

访问http:///localhost:8000/admin/,如果你任然是以管理员身份登陆的,在页眉找到注销连接并单击,注销后访问 http://localhost:8000/users/login/,会看到类似下面的图:

Web应用程序1.4——创建用户账户

Web应用程序1.4——创建用户账户

三、注销

1.注销URL

urls.py

urlpatterns=[
    --snip--
    #注销
    url(r'^logout/$',views.logout_view,name='logout'),]

2.视图函数logout_view()

views.py


from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth import logout

def logout_view(request):
	"""注销用户"""
	logout(request)
	return HttpResponseRedirect(reverse('learning_logs:index'))

3.链接到注销视图

base.html

--snip--
	{% if user.is_authenticated %}
	  Hello,{{ user.username }}.
	  <a href="{% url 'users:logout' %}">log out</a>
	{% else %}
	  <a href="{% url 'users:login' %}">log in</a>
	{% endif %}
</p>

{% block content %}{% endblock content %}
	

包含个性化问候语和注销链接的主页:
Web应用程序1.4——创建用户账户

四、注册页面

1.注册页面的URL模式

urls.py

urlpatterns=[
    --snip--
    #注册页面
    url(r'^register/$',views.register,name='register'),]

这个模式与URL  http://localhost:8000/users/register/匹配。

2.视图函数register()

views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth import logout,login,authenticate
from django.contrib.auth.forms import UserCreationForm
--snip--
def register(request):
	"""注册新用户"""
	if request.method!='POST':
		#显示空的注册表单
		form=UserCreationForm()
	else:
		#处理填写好的表单
		form=UserCreationForm(data=request.POST)
		
		if form.is_valid():
			new_user=form.save()
			#让用户自动登录,在重定向到主页
			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)

3.注册模板

register.html

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

  <form method="post" action="{% url 'users:register' %}">
	{% csrf_token %}
	{{ form.as_p }}
	
	<button name="submit">register</button>
	<input type="hidden" name="next" value="{% url 'learning_logs:index' %}" />
  </form>
  
{% endblock content %}  

4.链接到注册页面

base.html

--snip--
	{% if user.is_authenticated %}
	  Hello,{{ user.username }}.
	  <a href="{% url 'users:logout' %}">log out</a>
	{% else %}
	  <a href="{% url 'users:register' %}">register</a> -
	  <a href="{% url 'users:login' %}">log in</a>
	{% endif %}
</p>

{% block content %}{% endblock content %}
	

 

Web应用程序1.4——创建用户账户