【干货分享】使用Django轻松几步搞定用户认证功能

但凡是一个公开使用的系统,都离不开认证登录这个模块,如何快速出一个基本的认证登录页面供使用则是经常遇到的问题。好在django有一套成型的注册登录模块可供使用。如果你跟我一样不想重复造轮子,那么这篇分享或许可以帮你快速完成任务。
下面就几个关键常用的问题以FAQ的方式给出我在这块的学习总结笔记。

FAQ

Q: 使用Django自带的认证系统,大致流程是什么

默认支持的是本地认证

1、settings.py中加上auth/session等相关的中间件及APP;

2、运行 python manage.py syndb (django 1.7及以上版本,先后使用makemigrations、migrate命令替代)生成相应的表并设置管理员帐户及密码

3、urls.py 中分别加登入登出入口 url;

4、settings.py中加 LOGIN_URL(未通过认证时跳转的认证页面) 和 LOGIN_REDIRECT_URL (登录成功后默认跳转的页面)

5、加认证登录模板文件

6、写好系统所需的视图函数即可搞定。

Q: 如何创建用户?

使用 create_user 辅助函数创建用户:

Q: 如何修改密码?

Q: @login_required怎么用?

在django项目中,经常会看到下面这样的代码:

里面有一个@login_required标签。其作用就是告诉程序,使用这个方法是要求用户登录的。

1.如果用户还没有登录,默认会跳转到‘/accounts/login/’。这个值可以在settings文件中通过LOGIN_URL参数来设定。(后面还会自动加上你请求的url作为登录后跳转的地址,如: /accounts/login/?next=/polls/3/ 登录完成之后,会去请求/poll/3)

2.如果用户登录了,那么该方法就可以正常执行

如果LOGIN_URL使用默认值,那么在urls.py中还需要进行如下设置:(加入下面这句)

这样的话,如果未登录,程序会默认跳转到“templates\registration\login.html”这个模板。

如果想换个路径,那就再加个template_name参数,如下:

这样程序就会跳转到templates\myapp\login.html”

Q: 如何进行第三方认证?

第三方认证,也称“外部认证”,这里以Radius认证为例。

1、设置“认证后端”列表

在settings中设置AUTHENTICATION_BACKENDS参数,默认被设置为:(‘django.contrib.auth.backends.ModelBackend’,) AUTHENTICATION_BACKENDS 的顺序是重要的,所以如果相同的用户名和密码在多个后端中同时存在, Django 会在第一个匹配的地方停止。 示例:

示例

示例

2、编写一个认证后端

一个认证后端是一个执行两个方法的类: get_user(user_id) 和 authenticate(**credentials) 。

get_user 方法需要一个 user_id (可以是一个用户名、数据库 ID 或其他东东),并且返回一个用户对象。

authenticate 方法有一个证书关键字参数。多数情况下看上去如下:

class MyBackend:
def authenticate(self, username=None, password=None): // 检查用户名和密码并返回一个用户。

但是也可以认证一个标志,象下面这样:

class MyBackend:
def authenticate(self, token=None): // 检查标志并返回一个用户。

以下是一个后端实例,其中radius.py提供了auth类供该后端调用:

auth类

auth类

其它说明

如果你只需要做一个Demo供展示或对认证等的要求并不高,那么以上内容足够使用。但如果涉及到用户、组、权限的管理,还需要了解更多内容,可查阅相关文档。

如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669

发表评论