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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章