一、引入
在我们创建完Django项目之后,点击urls.py会发现有一个path('admin/', admin.site.urls),
的路由,那这个是什么呢?
输入127.0.0.1::8000/admin
我们可以看见这个管理员的登录页面

那我们没有用户名和密码啊,这怎么登录进去?
所以我们需要创建一个管理员(超级用户),在命令行输入
| python manage.py createsuperuser |
输完一些信息之后,我们会得到一个管理员账户,那负责这些用户的信息又在哪?
当创建好一个Django项目之后直接执行数据库迁移命令会自动生成很多表,这些表中的auth_user
存储的就是我们的用户信息。
Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user
表,并且是依赖于auth_user表完成用户相关的所有功能
二、方法总结
1、校验密码是否正确
| from django.contrib import auth |
| |
| username = request.POST.get('username') |
| password = request.POST.get('password') |
| |
| user_obj = auth.authenticate(request, username=username, password=password) |
| |
| |
| |
| print(user_obj) |
| |
| print(user_obj.username) |
| |
| print(user_obj.password) |
| |
| |
| |
| print(user_obj) |
2、保存用户状态
| |
| if user_obj: |
| |
| auth.login(request, user_obj) |
| |
3、判断当前用户是否登录
| |
| |
| print(request.user.is_authenticated()) |
4、获取当前登录的用户
5、检验用户是否登录装饰器
| from django.contrib.auth.decorators import login_required |
| |
| |
| @login_required(login_url='/login/') |
| |
| @login_required |
| LOGIN_URL = '/login/ |
| |
- 如果全局和局部都有,该听谁的?
- 局部和全局哪个比较好?
- 全局的好处在于无需重复写代码。但是跳转的页面却很单一
- 局部的好处在于不同的视图函数在用户没有登录的情况下可以跳转到不同的页面
6、校验原密码
| |
| is_right = request.user.check_password(old_password) |
| |
7、修改密码
| |
| request.user.set_password(confirm_password) |
| |
| request.user.save() |
8、注销登录用户
9、注册
| |
| |
| User.objects.create(username=username, password=confirm_password) |
| |
| User.objects.create_user(username=username, password=confirm_password) |
| |
| User.objects.create_superuser(username=username, password=password,email=email) |
三、如何扩展auth_user表
1、方式一(一对一关系 不推荐使用)
| from django.db import models |
| from django.contrib.auth.models import User, AbstractUser |
| |
| |
| |
| |
| |
| class UserDetail(models.Model): |
| phone = models.CharField(max_length=32) |
| user = models.OneToOneField(to='User', on_delete=models.CASCADE) |
2、方式二(面向对象的继承)
| from django.db import models |
| from django.contrib.auth.models import User, AbstractUser |
| |
| |
| class UserInfo(AbstractUser): |
| """ |
| 如果继承了AbstractUser |
| 那么在执行数据库迁移命令的时候auth_user表就不会再被创建出来了 |
| 而UserInfo表中会出现auth_user所有的字段外加自己扩展的字段 |
| |
| 这么做的好处在于你能够直接点击自己的表更加快速的完成操作及扩展 |
| |
| 前提: |
| 1.在继承之前没有执行过数据库迁移命令(auth_user没有被创建),如果当前库已经创建了这个表,那么就重新换一个库 |
| 2.继承的类里面不要覆盖AbstractUser里面的字段名 |
| 表里面有的字段都不要动,只扩展额外字段即可 |
| 3.需要再配置问价那种告诉django你要用UserInfo替代auth_user(******) |
| AUTH_USER_MODEL = 'app01.UserInfo',不要使用'应用名。models.表名',这是错的 |
| """ |
| phone = models.BigIntegerField() |
3、注意事项
需要再配置文件中声明 Django 要使用 UserInfo
替代 auth_user
| AUTH_USER_MODEL = 'app01.UserInfo' ---'应用名.表名' |
如果把自己写的表替代了auth_user
表,那么auth
模块的功能还是照常使用,参考的表也由原来的auth_user
编程了UserInfo
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?