经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django用户认证系统 User对象解析
来源:jb51  时间:2019/8/2 10:21:20  对本文有异议

User对象

User对象是认证系统的核心。用户对象通常用来代表网站的用户,并支持例如访问控制、注册用户、关联创建者和内容等。在Django认证框架中只有一个用户类,例如超级用户('superusers')或('staff')用户只不过是相同用户对象设置了不同属性而已。

缺省字段Fields

username

用户名,必需字段。30个字符或更少,可以包含 _, @, +, . 和 - 字符。

first_name

可选。 30 characters or fewer.

last_name

可选。 30 characters or fewer.

email

邮箱,可选。 Email address.

password

密码,必需。Django不是以明文存储密码的,而是存储哈希值。

groups

用户组。Many-to-many relationship to Group

user_permissions

用户权限。Many-to-many relationship to Permission

  1. groups = models.ManyToManyField(Group, verbose_name=_('groups'),
  2. blank=True, help_text=_('The groups this user belongs to. A user will '
  3. 'get all permissions granted to each of '
  4. 'their groups.'),
  5. related_name="user_set", related_query_name="user")
  6. user_permissions = models.ManyToManyField(Permission,
  7. verbose_name=_('user permissions'), blank=True,
  8. help_text=_('Specific permissions for this user.'),
  9. related_name="user_set", related_query_name="user")

is_staff

Boolean。决定用户是否可以访问admin管理界面。默认False。

is_active

Boolean。 用户是否活跃,默认True。一般不删除用户,而是将用户的is_active设为False。

is_superuser

Boolean。默认False。当设为True时,用户获得全部权限。

  1. def has_perm(self, perm, obj=None):
  2. """
  3. Returns True if the user has the specified permission. This method
  4. queries all available auth backends, but returns immediately if any
  5. backend returns True. Thus, a user who has permission from a single
  6. auth backend is assumed to have permission in general. If an object is
  7. provided, permissions for this specific object are checked.
  8. """
  9. # Active superusers have all permissions.
  10. if self.is_active and self.is_superuser:
  11. return True
  12. # Otherwise we need to check the backends.
  13. return _user_has_perm(self, perm, obj)

last_login

上一次的登录时间,为datetime对象,默认为当时的时间。

  1. user.last_login = timezone.now()

date_joined

用户创建的时间

方法Methods

is_anonymous()

是否是匿名用户。

is_authenticated()

用户是否通过验证,登陆。

get_full_name()

返回first_name plus the last_name, with a space in between.

get_short_name()

返回first_name.

set_password(raw_password)

设置密码。

check_password(raw_password)

验证密码。

get_group_permissions(obj=None)

返回用户组权限的集合。

get_all_permissions(obj=None)

返回用户所有的权限集合。

has_perm(perm, obj=None)

用户是否具有某个权限。perm的格式是 "<app label>.<permission codename>".

has_perms(perm_list, obj=None)

用户是否具有权限列表中的每个权限。

创建用户

由于User对象的密码不是明文存储的,所以创建User对象时与通常的Model create不同,需用内置的create_user()方法。

  1. >>> from django.contrib.auth.models import User
  2. >>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
  3. # At this point, user is a User object that has already been saved
  4. # to the database. You can continue to change its attributes
  5. # if you want to change other fields.
  6. >>> user.last_name = 'Lennon'
  7. >>> user.save()

当然也可以在admin界面中添加用户。

创建superusers

  1. $ python manage.py createsuperuser --username=joe --email=joe@example.com

修改密码

使用内置的set_password()方法。

  1. >>> from django.contrib.auth.models import User
  2. >>> u = User.objects.get(username='john')
  3. >>> u.set_password('new password')
  4. >>> u.save()

验证用户

authenticate()

验证给出的username和password是否是一个有效用户。如果有效,则返回一个User对象,无效则返回None。

  1. from django.contrib.auth import authenticate
  2. user = authenticate(username='john', password='secret')
  3. if user is not None:
  4. # the password verified for the user
  5. if user.is_active:
  6. print("User is valid, active and authenticated")
  7. else:
  8. print("The password is valid, but the account has been disabled!")
  9. else:
  10. # the authentication system was unable to verify the username and password
  11. print("The username and password were incorrect.")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号