django用戶登錄和注銷的實(shí)現(xiàn)方法
django版本:1.4.21。
一、準(zhǔn)備工作
1、新建項(xiàng)目和app
[root@yl-web-test srv]# django-admin.py startproject lxysite [root@yl-web-test srv]# cd lxysite/ [root@yl-web-test lxysite]# python manage.py startapp accounts [root@yl-web-test lxysite]# ls accounts lxysite manage.py
2、配置app
在項(xiàng)目settings.py中的
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'accounts', )
3、配置url
在項(xiàng)目urls.py中配置
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'lxysite.views.home', name='home'),
# url(r'^lxysite/', include('lxysite.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/', include('accounts.urls')),
)
4、配置templates
新建templates目錄來(lái)存放模板,
[root@yl-web-test lxysite]# mkdir templates [root@yl-web-test lxysite]# ls accounts lxysite manage.py templates
然后在settings中配置
TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. '/srv/lxysite/templates', )
5、配置數(shù)據(jù)庫(kù)
我用的是mysql數(shù)據(jù)庫(kù),先創(chuàng)建數(shù)據(jù)庫(kù)lxysite
mysql> create database lxysite; Query OK, 1 row affected (0.00 sec)
然后在settings.py中配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'lxysite', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': 'password', # Not used with sqlite3.
'HOST': '10.1.101.35', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
}
}
然后同步數(shù)據(jù)庫(kù):同步過(guò)程創(chuàng)建了一個(gè)管理員賬號(hào):liuxiaoyan,password,后面就用這個(gè)賬號(hào)登錄和注銷登錄。
[root@yl-web-test lxysite]# python manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'root'): liuxiaoyan E-mail address: liuxiaoyan@test.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
至此,準(zhǔn)備工作完成。
二、實(shí)現(xiàn)登錄功能
使用django自帶的用戶認(rèn)證,實(shí)現(xiàn)用戶登錄和注銷。
1、定義一個(gè)用戶登錄表單(forms.py)
因?yàn)橛玫牧薭ootstrap框架,執(zhí)行命令#pip install django-bootstrap-toolkit安裝。
并在settings.py文件中配置
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'bootstrap_toolkit', 'accounts', )
forms.py沒有強(qiáng)制規(guī)定,建議放在和app的views.py同一目錄。
#coding=utf-8
from django import forms
from django.contrib.auth.models import User
from bootstrap_toolkit.widgets import BootstrapDateInput,BootstrapTextInput,BootstrapUneditableInput
class LoginForm(forms.Form):
username = forms.CharField(
required = True,
label=u"用戶名",
error_messages={'required':'請(qǐng)輸入用戶名'},
widget=forms.TextInput(
attrs={
'placeholder':u"用戶名",
}
)
)
password = forms.CharField(
required=True,
label=u"密碼",
error_messages={'required':u'請(qǐng)輸入密碼'},
widget=forms.PasswordInput(
attrs={
'placeholder':u"密碼",
}
),
)
def clean(self):
if not self.is_valid():
raise forms.ValidationError(u"用戶名和密碼為必填項(xiàng)")
else:
cleaned_data = super(LoginForm,self).clean()
定義的登錄表單有兩個(gè)域username和password,這兩個(gè)域都為必填項(xiàng)。
2、定義登錄視圖views.py
在視圖里實(shí)例化上一步定義的用戶登錄表單
# Create your views here.
from django.shortcuts import render_to_response,render,get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.models import User
from django.contrib import auth
from django.contrib import messages
from django.template.context import RequestContext
from django.forms.formsets import formset_factory
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from bootstrap_toolkit.widgets import BootstrapUneditableInput
from django.contrib.auth.decorators import login_required
from forms import LoginForm
def login(request):
if request.method == 'GET':
form = LoginForm()
return render_to_response('login.html',RequestContext(request,{'form':form,}))
else:
form = LoginForm(request.POST)
if form.is_valid():
username = request.POST.get('username','')
password = request.POST.get('password','')
user = auth.authenticate(username=username,password=password)
if user is not None and user.is_active:
auth.login(request,user)
return render_to_response('index.html',RequestContext(request))
else:
return render_to_response('login.html',RequestContext(request,{'form':form,'password_is_wrong':True}))
else:
return render_to_response('login.html',RequestContext(request,{'form':form,}))
該視圖實(shí)例化了前面定義的LoginForm,它的主要業(yè)務(wù)流邏輯是:
1、判斷必填項(xiàng)用戶名和密碼是否為空,如果為空,提示“用戶名和密碼為必填項(xiàng)”的錯(cuò)誤信息。
2、判斷用戶名和密碼是否正確,如果錯(cuò)誤,提示“用戶名或密碼錯(cuò)誤”的錯(cuò)誤信息。
3、登錄成功后,進(jìn)入主頁(yè)(index.html)
3、登錄頁(yè)面模板(login.html)
<!DOCTYPE html>
{% load bootstrap_toolkit %}
{% load url from future %}
<html lang="en">
<head>
<meta charset="utf-8">
<title>數(shù)據(jù)庫(kù)腳本發(fā)布系統(tǒng)</title>
<meta name="description" content="">
<meta name="author" content="朱顯杰">
{% bootstrap_stylesheet_tag %}
{% bootstrap_stylesheet_tag "responsive" %}
<style type="text/css">
body {
padding-top: 60px;
}
</style>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>-->
{% bootstrap_javascript_tag %}
{% block extra_head %}{% endblock %}
</head>
<body>
{% if password_is_wrong %}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>錯(cuò)誤!</h4>用戶名或密碼錯(cuò)誤
</div>
{% endif %}
<div class="well">
<h1>數(shù)據(jù)庫(kù)腳本發(fā)布系統(tǒng)</h1>
<p>?</p>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{{ form|as_bootstrap:"horizontal" }}
<p class="form-actions">
<input type="submit" value="登錄" class="btn btn-primary">
<a href="/contactme/"><input type="button" value="忘記密碼" class="btn btn-danger"></a>
<a href="/contactme/"><input type="button" value="新員工?" class="btn btn-success"></a>
</p>
</form>
</div>
</body>
</html>
配置accounts的urls.py
from django.conf.urls import *
from accounts.views import login,logout
urlpatterns = patterns('',
url(r'login/$',login),
)
4、首頁(yè)(index.html)
代碼如下:
<!DOCTYPE html>
{% load bootstrap_toolkit %}
<html lang="en">
{% bootstrap_stylesheet_tag %}
{% bootstrap_stylesheet_tag "responsive" %}
<h1>登錄成功</h1>
<a href="/accounts/logout/"><input type="button" value="登出" class="btn btn-success"></a>
</html>
配置登出的url
from django.conf.urls import *
from accounts.views import login,logout
urlpatterns = patterns('',
url(r'login/$',login),
url(r'logout/$',logout),
)
登錄視圖如下:調(diào)用djagno自帶用戶認(rèn)證系統(tǒng)的logout,然后返回登錄界面。
@login_required
def logout(request):
auth.logout(request)
return HttpResponseRedirect("/accounts/login/")
上面@login_required標(biāo)示只有登錄用戶才能調(diào)用該視圖,否則自動(dòng)重定向到登錄頁(yè)面。
三、登錄注銷演示
1、執(zhí)行python manage.py runserver 0.0.0.0:8000
在瀏覽器輸入ip+端口訪問(wèn),出現(xiàn)登錄界面

2、當(dāng)用戶名或密碼為空時(shí),提示“用戶名和密碼為必填項(xiàng)”

3、當(dāng)用戶名或密碼錯(cuò)誤時(shí),提示“用戶名或密碼錯(cuò)誤”

4、輸入正確用戶名和密碼(創(chuàng)建數(shù)據(jù)庫(kù)時(shí)生成的liuxiaoyan,password),進(jìn)入主頁(yè)

5、點(diǎn)擊登出,注銷登錄,返回登錄頁(yè)面。
四、排錯(cuò)
1、'bootstrap_toolkit' is not a valid tag library
因?yàn)槟愕腎NSTALLED_APP沒有安裝'bootstrap_toolkit',安裝即可。
資源鏈接
http://www.dbjr.com.cn/article/143857.htm
http://www.dbjr.com.cn/article/143850.htm
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)
- Django小白教程之Django用戶注冊(cè)與登錄
- 在Django中限制已登錄用戶的訪問(wèn)的方法
- django用戶注冊(cè)、登錄、注銷和用戶擴(kuò)展的示例
- django實(shí)現(xiàn)登錄時(shí)候輸入密碼錯(cuò)誤5次鎖定用戶十分鐘
- Django實(shí)戰(zhàn)之用戶認(rèn)證(用戶登錄與注銷)
- Django利用cookie保存用戶登錄信息的簡(jiǎn)單實(shí)現(xiàn)方法
- Django實(shí)現(xiàn)單用戶登錄的方法示例
- Django自定義用戶登錄認(rèn)證示例代碼
相關(guān)文章
python實(shí)現(xiàn)年會(huì)抽獎(jiǎng)程序
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)年會(huì)抽獎(jiǎng)程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
pandas中DataFrame的merge操作的實(shí)現(xiàn)
本文主要介紹了pandas中DataFrame的merge操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
pytorch對(duì)梯度進(jìn)行可視化進(jìn)行梯度檢查教程
今天小編就為大家分享一篇pytorch對(duì)梯度進(jìn)行可視化進(jìn)行梯度檢查教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python實(shí)現(xiàn)提取圖片中顏色并繪制成可視化圖表
今天小編來(lái)為大家分享一個(gè)有趣的可視化技巧,就是如何利用Python語(yǔ)言實(shí)現(xiàn)從圖片中提取顏色然后繪制成可視化圖表,感興趣的可以嘗試一下2022-07-07
python爬蟲把url鏈接編碼成gbk2312格式過(guò)程解析
這篇文章主要介紹了python爬蟲把url鏈接編碼成gbk2312格式過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Linux上Miniconda的安裝的實(shí)現(xiàn)步驟
Miniconda是一個(gè)輕量級(jí)、免費(fèi)且開源的跨平臺(tái)軟件包管理系統(tǒng),本文主要介紹了Linux上Miniconda的安裝的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Pytorch中torch.stack()函數(shù)的深入解析
在pytorch中常見的拼接函數(shù)主要是兩個(gè),分別是:stack()和cat(),下面這篇文章主要給大家介紹了關(guān)于Pytorch中torch.stack()函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
淺談django開發(fā)者模式中的autoreload是如何實(shí)現(xiàn)的
下面小編就為大家?guī)?lái)一篇淺談django開發(fā)者模式中的autoreload是如何實(shí)現(xiàn)的。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

