2.4.4.1、Django新建APP(acounts)
$django-admin.py startapp accounts
在oss/accounts修改forms.py(新建)和views.py如下:
注:綠字部分為注釋
views.py
################################################################
#coding=utf-8 from django.core.urlresolvers import reverse from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response from django.template import RequestContext from django.contrib import messages from django.contrib.auth.models import User from django.contrib.auth import authenticate, login as auth_login ,logout as auth_logout from django.utils.translation import ugettext_lazy as _ from forms import RegisterForm,LoginFormdef index(request):'''首頁視圖'''template_var={"w":_(u"歡迎您,請登錄!")}//初始化字典,key=wif request.user.is_authenticated()://如果用戶登錄返回值為1template_var["w"]=_(u"歡迎您 %s!")%request.user.username//修改字典key=w對應(yīng)的值為usernamereturn render_to_response("accounts/welcome.html",template_var,context_instance=RequestContext(request))//每個視圖函數(shù)的返回值,具體可參照官方文檔,這里表示用accounts/welcome.html模板渲染def register(request)://注冊用戶視圖'''注冊視圖'''template_var={}form = RegisterForm()//調(diào)用forms.py中RegisterForm() ,初始化form if request.method=="POST"://模板register.html用POST方法提交表單form=RegisterForm(request.POST.copy())if form.is_valid()://判斷表單是否有效username=form.cleaned_data["username"]//先判斷再賦值email=form.cleaned_data["email"]password=form.cleaned_data["password"]user=User.objects.create_user(username,email,password)//調(diào)用Django.auth中創(chuàng)建用戶的函數(shù)創(chuàng)建用戶create_user()user.save()//存儲添加的用戶到數(shù)據(jù)庫_login(request,username,password)#注冊完畢 直接登陸//調(diào)用veiws.py中的登錄核心方法return HttpResponseRedirect(reverse("index"))//登錄成功跳轉(zhuǎn)到urls中對應(yīng)name=index的視圖 template_var["form"]=form//把form中存儲的user,password,email記錄在字典template_var中 return render_to_response("accounts/register.html",template_var,context_instance=RequestContext(request))def login_view(request):'''登陸視圖'''template_var={}form = LoginForm() if request.method == 'POST':form=LoginForm(request.POST.copy())if form.is_valid():_login(request,form.cleaned_data["username"],form.cleaned_data["password"])return HttpResponseRedirect(reverse("index"))template_var["form"]=form return render_to_response("accounts/login.html",template_var,context_instance=RequestContext(request))def _login(request,username,password):'''登陸核心方法'''ret=Falseuser=authenticate(username=username,password=password)if user:if user.is_active:auth_login(request,user)//調(diào)用Django的login方法(這里是重命名的,參照from XX import XX as xx)ret=Trueelse:messages.add_message(request, messages.INFO, _(u'用戶沒有激活'))else:messages.add_message(request, messages.INFO, _(u'用戶不存在'))return ret//返回登錄狀態(tài)def logout_view(request):'''注銷視圖'''auth_logout(request)return HttpResponseRedirect(reverse('index'))//注銷后跳轉(zhuǎn)到index
forms.py
#coding=utf-8 from django import forms from django.contrib.auth.models import User from django.utils.translation import ugettext_lazy as _class RegisterForm(forms.Form):username=forms.CharField(label=_(u"昵稱"),max_length=30,widget=forms.TextInput(attrs={'size': 20,}))password=forms.CharField(label=_(u"密碼"),max_length=30,widget=forms.PasswordInput(attrs={'size': 20,}))email=forms.EmailField(label=_(u"郵件"),max_length=30,widget=forms.TextInput(attrs={'size': 30,}))def clean_username(self):'''驗(yàn)證重復(fù)昵稱'''users = User.objects.filter(username__iexact=self.cleaned_data["username"])if not users:return self.cleaned_data["username"]raise forms.ValidationError(_(u"該昵稱已經(jīng)被使用請使用其他的昵稱"))def clean_email(self):'''驗(yàn)證重復(fù)email'''emails = User.objects.filter(email__iexact=self.cleaned_data["email"])if not emails:return self.cleaned_data["email"]raise forms.ValidationError(_(u"該郵箱已經(jīng)被使用請使用其他的"))class LoginForm(forms.Form):username=forms.CharField(label=_(u"昵稱"),max_length=30,widget=forms.TextInput(attrs={'size': 20,}))password=forms.CharField(label=_(u"密碼"),max_length=30,widget=forms.PasswordInput(attrs={'size': 20,}))
在oss/templates/accounts中添加login.html,register.html和welcome.html?
################################################################
login.html
<html lang="en"> <head><title>Account Login</title> </head> <body>{% if messages %} <ul>{% for message in messages %}<li>{{ message }}</li>{% endfor %} </ul> {% endif %}<form action="" method="post">{% csrf_token %}//防止用戶重復(fù)非法登錄<table border="0" cellpadding="0" >{{form.as_table}} </table><p> <a href="{%url "register_view"%}">注冊</a> <a href="{%url "index"%}">返回首頁</a> <input type="submit" value="登錄"/></p></form> </body> </html>
################################################################
Register.html
<html lang="en"> <head><title>用戶注冊</title> </head> <body><form action="" method="post">{% csrf_token %}<table border="0" cellpadding="0" >{{form.as_table}} </table><p> <a href="{% url "login_view" %}">登陸</a> <a href="{% url "index" %}">返回首頁</a> <input type="submit" value="注冊"/></p></form> </body> </html>
################################################################
Welcome.html
<html lang="en"> <head><title>Welcome!</title> </head> <body><h2>{{w}}</h2>//調(diào)用login視圖里的字典(key=w)<hr/> {% if messages %} <ul class="messages">{% for message in messages %}<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>{% endfor %} </ul> {% endif %} {% if user.is_authenticated %}<a href="{% url "logout_view" %}">注銷</a><a href="{% url "index_oss" %}">返回hrloo_oss主頁</a> {% else %}<a href="{% url "login_view" %}">登陸</a> |<a href="{% url "register_view" %}">注冊</a> {% endif %} </body> </html>
在oss/urls.py 中添加如下url
url(r'^accounts/login/$', 'oss.accounts.views.login_view', name='login_view'),
url(r'^accounts/logout$', 'oss.accounts.views.logout_view', name='logout_view'),
url(r'^accounts/register$', 'oss.accounts.views.register', name='register_view'),
?
現(xiàn)在啟動web服務(wù):python manage.py runserver 10.1.1.145:8000
訪問url:http://10.1.1.145:8000/accounts/login 就可以看到登錄界面,注冊和登出操作訪問相應(yīng)url就可以實(shí)現(xiàn)。
轉(zhuǎn)載于:https://www.cnblogs.com/fremcode/p/3842199.html
總結(jié)
以上是生活随笔為你收集整理的2.4.4.1、Django新建APP(acounts)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿sa打破的那个东东叫做pinata,本
- 下一篇: 机房收费系统系列一:运行时错误‘-214