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

一.应用程序users

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

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/,会看到类似下面的图:



三、注销

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 %}
	

包含个性化问候语和注销链接的主页:

四、注册页面

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 %}
	

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值