DJANGO DJANGO1.6中自定义用户身份验证功能的教程[附源码]
2014-10-30 14:16
549 查看
五月
8, 2014 ROBOT
4条评论http://blog.objcc.com/customizing-authentication-in-django/
本教程用于帮大家熟悉如何在Django中自定义用户身份验证功能。通过一个自定义的身份验证类,实现一个最简单的用户验证功能。
项目的目标:
说明:本示例中的部分代码源自Django官方网站的documentation,代码运行测试环境为Django1.6。首先创建工程,名称叫”test_auth”:
启动服务:
浏览器访问 http://127.0.0.1:8000 看到下图的网页说明一切正常:
然后同步数据库,创建默认的数据库表,注意:当提示是否创建管理员用户时输入no:
Creating tables …
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
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): no
Installing custom SQL …
Installing indexes …
Installed 0 object(s) from 0 fixture(s)
创建数据库完成后可以看到结果是0 object,也就是表中没有任何记录。
接下来先为用户定义个密码,为了简单,密码就叫‘what’吧,虽然看上去有点傻,不过确实很简单:
有了密码hash我们将它连同用户名一起配置到settings.py中:
将如下两行加到文件最后(注意密码不是明码而是上一步我们生成它的hash):
现在说到关键,自定义用户验证类app我们起名为’myauth’,类名为官网文档中的’SettingsBackend’,继续修改settings.py,在INSTALLED_APPS的最后加上’myauth’(这里先配置,接下来我们会实现这个类):
同时在配置文件中加上AUTHENTICATION_BACKENDS配置,Django会使用这里配置的Backend进行用户验证工作:
下面是实现‘myauth’的时候了:
SettingsBackend.py的内容源自Django官网的文档:
现在我们可以通过登录admin后台体验下刚刚自定义的用户身份验证功能了:打开浏览器访问:http://127.0.0.1:8000/admin/使用我们预定义的用户名和密码登录,可以先输入错误的,看看提示的错误信息。
然后输入正确的,登录成功后会看到:
点击用户可以看到由SettingsBackend为我们创建的admin用户:
自定义的用户验证类已经完成了,不过在现实中一般除了admin后台,前台也会有APP需要进行身份验证,所以最后我们快速建立一个最简单的APP应用下刚才自定义的身份验证功能。再建立一个APP,名称为’myapp’:
修改url配置:
增加如下一行:
编加views.py:
输出内容是本博客的网址,这里为了看验证功能,对视图函数加上’@login_required’修饰指令,要求访问它时必需进行身份验证:
还要在settings.py 的INSTALLED_APPS中加上 ‘myapp’:
加上 ‘myapp’:
下面打开浏览器访问 http://127.0.0.1:8000 如果刚才你没有在admin退出登录的话,可以看到正常的页面内容:
如果在admin后台 http://127.0.0.1:8000/admin/ 点退出:
然后再访问 http://127.0.0.1:8000 会看到如下错误页面:
http://127.0.0.1:8000/accounts/login/?next=/ 跳转到这个页面是因为由于用户没有登录,验证失败时Django会默认跳转到“setting.LOGIN_URL”定义的链接,这说明我们上面的验证是有效的。
关于详细的说明请访问官方网站:
Customizing
authentication in Django
以上全部源码可免费得到:
https://github.com/objcc/CustAuthTutorial
获取更多干货还可关注微信公号’python-django’及新浪微博@suwei76
3,811 total views, 2 views today
8, 2014 ROBOT
4条评论http://blog.objcc.com/customizing-authentication-in-django/
本教程用于帮大家熟悉如何在Django中自定义用户身份验证功能。通过一个自定义的身份验证类,实现一个最简单的用户验证功能。
项目的目标:
123 | 用户在登录admin后台时必需使用我们在settings.py中预先定义好的用户名和密码。首次登录admin后台会将用户作为管理员记录到数据库表中。通过一个最简单的APP测试身份验证功能是否有效。 |
1 2 | $ django-admin.py startproject test_auth $ cd test_auth/ |
1 | $ python manage.py runserver |
然后同步数据库,创建默认的数据库表,注意:当提示是否创建管理员用户时输入no:
1 | $python manage.py syncdb |
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
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): no
Installing custom SQL …
Installing indexes …
Installed 0 object(s) from 0 fixture(s)
创建数据库完成后可以看到结果是0 object,也就是表中没有任何记录。
接下来先为用户定义个密码,为了简单,密码就叫‘what’吧,虽然看上去有点傻,不过确实很简单:
1234 | $python manage.py shellfrom django.contrib.auth.models import make_passwordmake_password('what')u'pbkdf2_sha256$12000$cQVmovdDUk7t$XPlZ4C+ZK/ypWUtIQCs+jPxZZhDHgN7yYvU2Oc0OIGE=' |
1 | $ vi test_auth/settings.py |
12 | ADMIN_LOGIN = 'admin'ADMIN_PASSWORD = 'pbkdf2_sha256$12000$cQVmovdDUk7t$XPlZ4C+ZK/ypWUtIQCs+jPxZZhDHgN7yYvU2Oc0OIGE=' |
1 2 3 4 | INSTALLED_APPS = ( ... 'myauth', ) |
1 | AUTHENTICATION_BACKENDS=('myauth.SettingsBackend.SettingsBackend', ) |
1 2 3 4 | $ mkdir myauth $ cd myauth/ $ touch __init__.py $ vi SettingsBackend.py |
1234567891011121314151617181920212223242526272829303132333435 | from django.conf import settingsfrom django.contrib.auth.models import User, check_password class SettingsBackend(object): """ Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD. Use the login name, and a hash of the password. For example: ADMIN_LOGIN = 'admin' ADMIN_PASSWORD = 'sha1$4e987$afbcf42e21bd417fb71db8c66b321e9fc33051de' """ def authenticate(self, username=None, password=None): login_valid = (settings.ADMIN_LOGIN == username) pwd_valid = check_password(password, settings.ADMIN_PASSWORD) if login_valid and pwd_valid: try: user = User.objects.get(username=username) except User.DoesNotExist: # Create a new user. Note that we can set password # to anything, because it won't be checked; the password # from settings.py will. user = User(username=username, password='get from settings.py') user.is_staff = True user.is_superuser = True user.save() return user return None def get_user(self, user_id): try: return User.objects.get(pk=user_id) except User.DoesNotExist: return None |
然后输入正确的,登录成功后会看到:
点击用户可以看到由SettingsBackend为我们创建的admin用户:
自定义的用户验证类已经完成了,不过在现实中一般除了admin后台,前台也会有APP需要进行身份验证,所以最后我们快速建立一个最简单的APP应用下刚才自定义的身份验证功能。再建立一个APP,名称为’myapp’:
1 | $ python manage.py startapp myapp |
1 | $ vi test_auth/urls.py |
1 | url(r'^$', 'myapp.views.home', name='home'), |
1 | $ vi myapp/views.py |
1 2 3 4 5 6 7 | from django.http import HttpResponse from django.contrib.auth.decorators import login_required # Create your views here. @login_required def home(request): return HttpResponse('<h1>blog.objcc.com</h1>') |
1 | $ vi test_auth/settings.py |
1 2 3 4 5 | INSTALLED_APPS = ( ... 'myauth', 'myapp', ) |
如果在admin后台 http://127.0.0.1:8000/admin/ 点退出:
然后再访问 http://127.0.0.1:8000 会看到如下错误页面:
http://127.0.0.1:8000/accounts/login/?next=/ 跳转到这个页面是因为由于用户没有登录,验证失败时Django会默认跳转到“setting.LOGIN_URL”定义的链接,这说明我们上面的验证是有效的。
关于详细的说明请访问官方网站:
Customizing
authentication in Django
以上全部源码可免费得到:
https://github.com/objcc/CustAuthTutorial
获取更多干货还可关注微信公号’python-django’及新浪微博@suwei76
3,811 total views, 2 views today
相关文章推荐
- DJANGO1.6中自定义用户身份验证功能的教程[附源码]
- django 中的用户身份验证和 session 的关系
- Silverlight4 beta 中的.net ria service自定义用户身份验证之改变
- AngularJS中实现用户访问的身份认证和表单验证功能
- PureFTP借助MySQL实现用户身份验证的操作教程
- django项目培训站-17-用户登陆-自定义用户验证方式-错误提示信息传前端
- 用户验证之自定义身份验证
- ASP.NET MVC5+MySql使用ASP.NET 身份验证实现用户和角色功能 1 概述 目标:使用MySql数据库,建立一个使用ASP.NET 身份验证的应用,并实现角色功能,身份
- AngularJS中实现用户访问的身份认证和表单验证功能
- .NET RIA Service入门系列文章八:自定义用户身份验证
- Android实战简易教程<二十三>(基于Baas的用户注册验证用户名是否重复功能!)
- java源码实现生成,签发,验证用户证书功能
- django实现用户注册以及邮箱验证功能
- [Django学习] 用户身份验证模块
- .net ria services自定义用户身份验证(8)
- Android实战简易教程-第二十三枪(基于Baas的用户注册验证用户名是否重复功能!)
- python3开发进阶-Django框架中form的查看校验方法is_valid()的源码,自定义验证方法
- [Django学习] 用户身份验证模块
- Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)
- Python通过Django实现用户注册和邮箱验证功能代码