django版本:1.4.21。
一、准备工作1、新建项目和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]#lsaccounts lxysite manage.py
2、配置app在项目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在项目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目录来存放模板,
[root@yl-web-test lxysite]#mkdir templates[root@yl-web-test lxysite]#lsaccounts 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、配置数据库我用的是MySQL数据库,先创建数据库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.}
}
然后同步数据库:同步过程创建了一个管理员账号:liuxiaoyan,password,后面就用这个账号登录和注销登录。
[root@yl-web-test lxysite]#python manage.py syncdbCreating 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)from0 fixture(s)
至此,准备工作完成。
二、实现登录功能使用django自带的用户认证,实现用户登录和注销。
1、定义一个用户登录表单(forms.py)因为用的了bootstrap框架,执行命令#pipinstall 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没有强制规定,建议放在和app的views.py同一目录。
#coding=utf-8fromdjangoimportformsfromdjango.contrib.auth.modelsimportUserfrombootstrap_toolkit.widgetsimportBootstrapDateInput,BootstrapTextInput,BootstrapUneditableInputclassLoginForm(forms.Form):
username=forms.CharField(
required=True,
label=u"用户名",
error_messages={'required':'请输入用户名'},
widget=forms.TextInput(
attrs={'placeholder':u"用户名",
}
)
)
password=forms.CharField(
required=True,
label=u"密码",
error_messages={'required':u'请输入密码'},
widget=forms.PasswordInput(
attrs={'placeholder':u"密码",
}
),
)defclean(self):ifnotself.is_valid():raiseforms.ValidationError(u"用户名和密码为必填项")else:
cleaned_data= super(LoginForm,self).clean()
定义的登录表单有两个域username和password,这两个域都为必填项。
2、定义登录视图views.py在视图里实例化上一步定义的用户登录表单
#Create your views here.fromdjango.shortcutsimportrender_to_response,render,get_object_or_404fromdjango.httpimportHttpResponse, HttpResponseRedirectfromdjango.contrib.auth.modelsimportUserfromdjango.contribimportauthfromdjango.contribimportmessagesfromdjango.template.contextimportRequestContextfromdjango.forms.formsetsimportformset_factoryfromdjango.core.paginatorimportPaginator, PageNotAnInteger, EmptyPagefrombootstrap_toolkit.widgetsimportBootstrapUneditableInputfromdjango.contrib.auth.decoratorsimportlogin_requiredfromformsimportLoginFormdeflogin(request):ifrequest.method =='GET':
form=LoginForm()returnrender_to_response('login.html',RequestContext(request,{'form':form,}))else:
form=LoginForm(request.POST)ifform.is_valid():
username= request.POST.get('username','')
password= request.POST.get('password','')
user= auth.authenticate(username=username,password=password)ifuserisnotNoneanduser.is_active:
auth.login(request,user)returnrender_to_response('index.html',RequestContext(request))else:returnrender_to_response('login.html',RequestContext(request,{'form':form,'password_is_wrong':True}))else:returnrender_to_response('login.html',RequestContext(request,{'form':form,}))
该视图实例化了前面定义的LoginForm,它的主要业务流逻辑是:
1、判断必填项用户名和密码是否为空,如果为空,提示“用户名和密码为必填项”的错误信息。
2、判断用户名和密码是否正确,如果错误,提示“用户名或密码错误”的错误信息。
3、登录成功后,进入主页(index.html)
3、登录页面模板(login.html)<!DOCTYPE html>{% load bootstrap_toolkit %}
{% load url from future %}<htmllang="en"><head><metacharset="utf-8"><title>数据库脚本发布系统</title><metaname="description"content=""><metaname="author"content="朱显杰">{% bootstrap_stylesheet_tag %}
{% bootstrap_stylesheet_tag "responsive" %}<styletype="text/CSS">body{padding-top:60px;}</style><!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><!--<script src="//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 %}<divclass="alert alert-error"><buttontype="button"class="close"data-dismiss="alert">×</button><h4>错误!</h4>用户名或密码错误</div>{% endif %}<divclass="well"><h1>数据库脚本发布系统</h1><p>?</p><formclass="form-horizontal"action=""method="post">{% csrf_token %}
{{ form|as_bootstrap:"horizontal" }}<pclass="form-actions"><inputtype="submit"value="登录"class="btn btn-primary"><ahref="/contactme/"><inputtype="button"value="忘记密码"class="btn btn-danger"></a><ahref="/contactme/"><inputtype="button"value="新员工?"class="btn btn-success"></a></p></form></div></body></html>
配置accounts的urls.py
fromdjango.conf.urlsimport*fromaccounts.viewsimportlogin,logout
urlpatterns= patterns('',
url(r'login/$',login),)
4、首页(index.html)代码如下:
<!DOCTYPE html>{% load bootstrap_toolkit %}<htmllang="en">{% bootstrap_stylesheet_tag %}
{% bootstrap_stylesheet_tag "responsive" %}<h1>登录成功</h1><ahref="/accounts/logout/"><inputtype="button"value="登出"class="btn btn-success"></a></html>
配置登出的url
fromdjango.conf.urlsimport*fromaccounts.viewsimportlogin,logout
urlpatterns= patterns('',
url(r'login/$',login),
url(r'logout/$',logout),
)
登录视图如下:调用djagno自带用户认证系统的logout,然后返回登录界面。
@login_requireddeflogout(request):
auth.logout(request)returnHttpResponseRedirect("/accounts/login/")
上面@login_required标示只有登录用户才能调用该视图,否则自动重定向到登录页面。
三、登录注销演示1、执行python manage.py runserver 0.0.0.0:8000
在浏览器输入ip+端口访问,出现登录界面
2、当用户名或密码为空时,提示“用户名和密码为必填项”
3、当用户名或密码错误时,提示“用户名或密码错误”
4、输入正确用户名和密码(创建数据库时生成的liuxiaoyan,password),进入主页
5、点击登出,注销登录,返回登录页面。
四、排错1、'bootstrap_toolkit' is not a valid tag library
因为你的INSTALLED_APP没有安装'bootstrap_toolkit',安装即可。
资源链接
http://blog.csdn.net/dbanote/article/details/11465447
http://my.oschina.net/u/569730/blog/369144
本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4724381.html有问题欢迎与我讨论,共同进步。