Django自带的一整套登陆注册权限角色

在写登陆注册时,一般有两种方法,一种是直接使用Django的auth模块,另外一种就是自己模拟实现session和session id,前者的弊端就是字段固定,需要扩展时需要进行重写,后者就是自己造轮子,费时费力,设计的可能并没有Django那么好,但是可以精确控制字段,扩展度高,就来说说auth模块吧.

User

User是auth模块中维护用户信息的关系模式,在数据库中被命名为auth_user,使用migrate会自动生成.

创建User表的SQL语句:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE "auth_user" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"password" varchar(128) NOT NULL, "last_login" datetime NULL,
"is_superuser" bool NOT NULL,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL,
"email" varchar(254) NOT NULL,
"is_staff" bool NOT NULL,
"is_active" bool NOT NULL,
"date_joined" datetime NOT NULL,
"username" varchar(30) NOT NULL UNIQUE
)

在导入该时需要这样写,需要区别时是自带的还是自己写的

1
from django.contrib.auth.models import User

创建用户

1
2
user = User.objects.create_user(username, password)
user.save()

这里就是和普通ORM操作有所区别,通常使用了create之后就不需要.save就可以保存,这里需要执行.save来进行保存,auth模块会自动加密我们的密码.如果不用自带的User,需要加密解密时时就要用到

1
2
3
4
# 加密
make_password()
# 解密
check_password()

认证用户

1
2
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password)

认证成功返回True,认证失败返回Flase,一般在登陆时使用.

修改用户密码

1
2
user.set_password(new_password)
user.save()

这样可以配合中间件验证是否登陆,登陆的话可以进行修改密码.

登陆

1
2
3
4
5
6
7
# 导入模块
from django.contrib.auth import login
# 验证用户信息
user = authenticate(username=username, password=password)
if user is not None:
# 登陆
login(request, user)

使用login登陆成功之后,会设置session中的值,对用户进行跟踪,这里需要注意的是,没有使用login模块来进行登陆的话就需要使用

1
request.session['xxx'] = xxx

注销

1
2
3
from django.contrib.auth import logout
def logout_view(request):
logout(request)

如果不适用logout来尽心注销,就需要使用

1
del request.sessionp['xxx]

来删除session

这只是Django中模块的冰山一角,其中还有很多它帮我们造好的轮子,比如权限判断,限制登陆才能访问等.