Django2.0——权限系统Auth

 

 

Django默认提供了用户权限管理模块auth,在我们第一次数据库迁移时,他就自动帮我们在数据库中创建三张表:

官方文档参考

  1. user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_user. 该表继承自Abstractuser.
  2. group表,定义用户组模型,该表只包含一个name字段和一个permissions(权限)多对多关系字段,在数据库中被命名为auth_group.
  3. Permission,  权限表,提供表级别的权限控制,可以检查用户是否对某个表拥有增(add),改(change),删(delete)权限。

从数据库生成的表来看,这三张表实现了两两多对多的关联,其中用户和组生成的第三张表是auth_user_groups,group和permission生成的第三张表是auth_group_permissions,用户和权限生成的第三张表是auth_user_user_permissions。这里我们主要介绍下user表。

User表

在auth中user继承自AbstractUser,其中AbstractUser又继承自AbstractBaseUser和PermissionsMixin,其中AbstractBaseUser只保存了密码和登陆时间,PermissionsMixin提供了权限先关的字段,比如:is_superuser和组合权限表之间的关联。

User对象的字段

  1. password:Django默认保存是加密后的密码,无法直接看到明文密码
  2. last_login:上一次登陆时间
  3. is_superuser:是否是超级管理员,是为1,否为0
  4. username:用户名
  5. first_name
  6. last_name
  7. email:邮箱
  8. is_staff:用户是否拥有网站的管理权限
  9. is_active:是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。
  10. data_joined:账户创建日期
  11. groups: 与组多对多关联的字段
  12. user_permissions: 与权限关联的多对多字段,也就是是说明了为什么第三张表表为auth_user_user_permissions. 表名(user)+字段名(user_permissions)

类属性

  1. is_authenticated:判断是否被认证,即是否登陆
  2. is_anonymous: 是否为匿名用户
  3. username_validator:指向用于验证用户名的验证实例,默认是validators.UnicodeUsernameValidator

类方法

  1. get_username():  获取用户名
  2. get_full_name(): 获取全名,即first_name+空格+last_name
  3. get_short_name():获取first_name
  4. set_password(raw_password): 设置密码,如果raw_password是None,则密码将被设置为不可用的密码,就像使用了 set_unusable_password() 一样。
  5. check_password(raw_password): 检查密码是否正确。
  6. set_unusable_password():将用户标记为未设置密码,即密码为None
  7. has_usable_password():返回该用户是否未设置密码
  8. get_group_permissions(): 获取这个用户所在组中所具有的的全部权限。
  9. has_perm(): 判断一个用户是否具有某个权限。
  10. has_perms(perm_list): 判断用户对一个权限列表是否具有权限。
  11. has_module_perms(package_name): 判断对app是否有权限。

Auth模块常用方法

  • 创建用户
python manage.py createsuperuser
python manage.py createuser
  • 模块导入

from django.contrib import auth
  • 常用方法

1.authenticate():

提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的,认证失败返回None。

user = auth.authenticate(username='theuser',password='thepassword')

2.login(HttpRequest, user):

该函数接受一个HttpRequest对象,以及一个经过认证的User对象。该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = auth.authenticate(username=username, password=password)
    if user is not None:
        auth.login(request, user)
        # Redirect to a success page.
        ...
    else:
    # Return an 'invalid login' error message.
        ...

3.logout(request):

该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

def logout_view(request):
    auth.logout(request)
    # Redirect to a success page.

4.is_authenticated():

用来判断当前请求是否通过了认证。

def my_view(request):
    if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

5.login_requierd():

auth 给我们提供的一个装饰器工具,用来快捷的给某个视图函数添加登录校验。

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。 LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由

6.method_decorator():

auth 给我们提供的一个装饰器工具,用来快捷的给某个类视图添加登录校验。

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class Home(views.View):

    @method_decorator(login_required)
    def get(self, request):
        return render(request, 'home.html')

7.create_user():

auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

from django.contrib.auth.models import User

user = User.objects.create_user(username = '用户名', password = '密码', email = '邮箱', ...)
check_password(password)

8.create_superuser():

auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等。

from django.contrib.auth.models import User

user = User.objects.create_superuser(username = '用户名', password = '密码', email = '邮箱', ...)
check_password(password)

9.permission_requires(权限,raise_exception=True):

对视图函数指定权限验证。

 

 

 

 

 

展开阅读全文

smtp auth

03-13

我的email(C语言)程序对smtp.263.net 的验证通过了,但对smtp.sina.com.cn不行。rnrn以下是Outlook Express的log,我看不出有何神秘。rnrnsina的user、pswd的BASE64编码肯定没有错,当我调试到***DEBUG*****处时,等到的rn回复是超时(421);通过telnet 至smtp.sina.com.cn 25时,对方server的响应时间rn非常快,我总是超时(421),rn1、请问专家这问题如何解决?rn2、请问Outlook Express 又是如何解决这个问题的?rnrnrnOutlook Express 5.00.2314.1300rnSMTP Log started at 03/10/2001 16:26:21rnSMTP: 16:26:32 [rx] 220 smtp.263.net ESMTPrnSMTP: 16:26:32 [tx] EHLO HHFrnSMTP: 16:26:32 [rx] 250-smtp.263.netrnSMTP: 16:26:32 [rx] 250-PIPELININGrnSMTP: 16:26:32 [rx] 250-SIZE 10240000rnSMTP: 16:26:32 [rx] 250-ETRNrnSMTP: 16:26:32 [rx] 250-AUTH LOGINrnSMTP: 16:26:32 [rx] 250 8BITMIMErnSMTP: 16:26:32 [tx] AUTH LOGINrnSMTP: 16:26:32 [rx] 334 VXNlcm5hbWU6rnSMTP: 16:26:32 [tx] cXh6ZkrnSMTP: 16:26:33 [rx] 334 UGFzc3dvcmQ6rnSMTP: 16:26:33 [tx] DgDg4O=rnSMTP: 16:26:33 [rx] 235 Authentication successfulrnrnrnOutlook Express 5.00.2314.1300rnSMTP Log started at 03/10/2001 16:33:22rnSMTP: 16:33:23 [rx] 220 sina.com ESMTPrnSMTP: 16:34:28 [tx] EHLO HHFrnSMTP: 16:34:28 [rx] 250-sina.comrnSMTP: 16:34:28 [rx] 250-AUTH=LOGINrnSMTP: 16:34:28 [rx] 250-AUTH LOGINrnSMTP: 16:34:28 [rx] 250-PIPELININGrnSMTP: 16:34:28 [rx] 250 8BITMIMErnSMTP: 16:34:29 [tx] AUTH LOGINrnSMTP: 16:34:29 [rx] 334 VXNlcm5hbWU6rnSMTP: 16:34:29 [tx] d2l6YXJ3I=   ***DEBUG*****rnSMTP: 16:34:29 [rx] 334 UGFzc3dvcmQ6rnSMTP: 16:34:29 [tx] OD4g4ODg=rnSMTP: 16:34:30 [rx] 235 验证通过 - authentication successfullyrn 论坛

没有更多推荐了,返回首页