Auth中的表

简介

  1. 1. User:Userauth模块中维护用户信息的关系模式(继承了models.Model),数据库中该表被命名为auth_user.
  2. 2. Group:User对象中有-个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。
  3. 3. Group对象可以通过user_set反向查询用户组中的用户。
  4. 4. Permission:Djangoauth系统提供了模型级的权限控制,即可以检查用户是否对某个数据表拥有增(add),改(change),删(delete)权限。

数据库中的auth表

User模型常用的属性和方法

  1. User模型常用属性和方法
  2. username:用户名。
  3. email:邮箱。
  4. groups:多对多的组。
  5. user.permissions:多对多的用户权限。
  6. is_staff:是否是admin的管理员。
  7. is_active:是否激活,判断该用户是否可用。
  8. is_superuser:是否是超级用户。.
  9. last_login:.上次登录时间。
  10. date_joined:注册时间。
  11. is_authenticated:是否验证通过了。
  12. is_anonymous:是否是匿名用户。
  13. set_password(raw_password):设置密码,传原生密码进去。
  14. check_password(raw_password):检查密码。
  15. has_perm(perm):判断用户是否有某个权限。
  16. has_perms(perm_list):判断用户是否有权限列表中的某个列表

Auth中认证系统功能

  1. create_user创建用户
  2. authenticate验证登录
  3. login记住用户的登录状态
  4. logout退出登录
  5. is_authenticated判断用户是否登录
  6. login_required 判断用户是否登录的装饰器

逻辑设计

  1. 1. 使用内置的auth_ _user表来存储用户注册信息.
  2. 2. 使用auth系统中的login,logout,authenticate实现登录,退出和验证登录
  3. 3. blog中的视图设置登录使用权限
  4. 4. 给添加博客设置用户的权限
  5. ### 注意
  6. 对于这个登录注册的例子中,我们把之前自己定义的模型类改成了使用auth,系统中的User模型类,
  7. User类中同样存在着用户名,密码,邮箱这几个字段,所以我们可以继续使用之前的form表单和之前用过的模板.

登录注册的实现

第一步—-导入包以及修改类

  1. # 导入指定包
  2. from django. contrib. auth import login, logout, authent icate
  3. from django. contrib. auth. models import User, Permi ssion, Group
  4. # 分别修改登录注册类
  5. -------------------------------注册里面模型类的相关修改---------------------------------
  6. #### 不用自己创建的UserModel 直接使用auth里面的User模型
  7. UserModel.objects.create (username=username, password=password, email=email) # 原代码
  8. User.objects.create_user (username=username, password=password, email=email)
  9. -------------------------------登录里面模型类的相关修改---------------------------------
  10. user = UserModel.objects.filter (username=username, password=password) # 原代码
  11. user = authenticate(username=username, password=password)

第二步—-使用auth系统实现状态保持

  1. --------------登录里面状态保存的修改---------------------
  2. if user:
  3. # request.session[username] = username
  4. login(request, user)
  5. --------------退出登录里面的修改---------------------
  6. def logout_view (request):
  7. # request. session.flush ()
  8. logout (request)
  9. return redirect(reverse('ss_ form home'))

第三步—-使用两个装饰器

  1. ---------------------------settings中配置登录的URL-------------------
  2. LOGIN_URL = '/ts44/login/'
  3. -----------给需要登录权限才能进入的视频添加login_required装饰器---------
  4. @login_required
  5. def index(request):
  6. return render(requests, 'blog/demo_index.html')
  7. ---------------------------next_url的使用----------------------------
  8. if user:
  9. '''
  10. 从刚才的登录页跳转中,我们会看到一个next的参数,
  11. 这个参数前面的需要登录的那个视图的ur.
  12. '''
  13. login (request, user)
  14. next_url = request.GET.get(next)
  15. if next_url:
  16. print(next_ _ur1)
  17. return redirect (next_ url)
  18. return redirect (reverse(’ts44_ home' ))
  19. ------------------------permission_required装饰器-----------------------
  20. @permission_required(appname.codename(权限名称))
  21. 给blogapp当中的add添加博客的视图设置权限
  22. from django.contrib.auth.decorators import permission required
  23. @permission_required('blog.add_blogmodel') # 对某个类添加权限
  24. def add_get_post(request):
  25. if request.method == 'GET': # 分别处理GET和POST请求
  26. return render (request,'blog/demo_ add.html' )
  27. elif request.method == 'POST':
  28. title = request.POST.get('title')
  29. content = request.POST.get('content')
  30. blog = BlogMode1(title=title,content=content)
  31. blog.save()
  32. return redirect(reverse('add_cls_def'))
  33. ----------------------------对特定对象赋予权限---------------------------------
  34. # 添加用户
  35. # User.objects.create_user(username='xixi',password='qwe123 email=’12345@qq.com’)
  36. # 修改密码
  37. xixi = User.objects.filter(username='xixi').first()
  38. # taka.set_password(qwe123)
  39. # taka.save()
  40. #给taka添加可以add BlogMode1的权限
  41. permission = Permission.objects.filter(codename='add_blogmodel' ).first()
  42. # print(permission)
  43. # taka.user_permissions.add(permission)

Permission权限模型

  1. mysql> select * from auth_permission;
  2. +----+-------------------------+-----------------+--------------------+
  3. | id | name | content_type_id | codename |
  4. +----+-------------------------+-----------------+--------------------+
  5. | 1 | Can add log entry | 1 | add_logentry |
  6. | 2 | Can change log entry | 1 | change_logentry |
  7. | 3 | Can delete log entry | 1 | delete_logentry |
  8. | 4 | Can view log entry | 1 | view_logentry |
  9. | 5 | Can add permission | 2 | add_permission |
  10. | 6 | Can change permission | 2 | change_permission |
  11. | 7 | Can delete permission | 2 | delete_permission |
  12. | 8 | Can view permission | 2 | view_permission |
  13. | 9 | Can add group | 3 | add_group |
  14. | 10 | Can change group | 3 | change_group |
  15. | 11 | Can delete group | 3 | delete_group |
  16. | 12 | Can view group | 3 | view_group |
  17. | 13 | Can add user | 4 | add_user |
  18. | 14 | Can change user | 4 | change_user |
  19. | 15 | Can delete user | 4 | delete_user |
  20. | 16 | Can view user | 4 | view_user |
  21. | 17 | Can add content type | 5 | add_contenttype |
  22. | 18 | Can change content type | 5 | change_contenttype |
  23. | 19 | Can delete content type | 5 | delete_contenttype |
  24. | 20 | Can view content type | 5 | view_contenttype |
  25. | 21 | Can add session | 6 | add_session |
  26. | 22 | Can change session | 6 | change_session |
  27. | 23 | Can delete session | 6 | delete_session |
  28. | 24 | Can view session | 6 | view_session |
  29. | 25 | Can add department | 7 | add_department |
  30. | 26 | Can change department | 7 | change_department |
  31. | 27 | Can delete department | 7 | delete_department |
  32. | 28 | Can view department | 7 | view_department |
  33. | 29 | Can add student | 8 | add_student |
  34. | 30 | Can change student | 8 | change_student |
  35. | 31 | Can delete student | 8 | delete_student |
  36. | 32 | Can view student | 8 | view_student |
  37. | 33 | Can add book info | 9 | add_bookinfo |
  38. | 34 | Can change book info | 9 | change_bookinfo |
  39. | 35 | Can delete book info | 9 | delete_bookinfo |
  40. | 36 | Can view book info | 9 | view_bookinfo |
  41. | 37 | Can add user | 10 | add_user |
  42. | 38 | Can change user | 10 | change_user |
  43. | 39 | Can delete user | 10 | delete_user |
  44. | 40 | Can view user | 10 | view_user |
  45. +----+-------------------------+-----------------+--------------------+
  46. 40 rows in set (0.00 sec)

业务逻辑修改

  1. ### views视图的改写
  2. def home1(request):
  3. username = request.session.get('username', '未登录') # auth改写
  4. return render(request, 'user/home.html', context={'username':username})
  5. def logout_auth(request):
  6. # 退出登录的逻辑
  7. # 1. 退出状态,在session
  8. # request.session.flush()
  9. logout(request) # auth改写
  10. return redirect(reverse('home1'))
  11. ### URL匹配
  12. path('login_auth/', views.login_auth, name="login_auth"), # 使用user表创建登录页面
  13. path('logout_auth/', views.logout_auth, name="login_auth"), # 使用user表创建退出页面

权限的实现

注意

在项目look下实施

总结

概述

主要了解用户,权限,组

用auth方法改写之前的login, logout等业务逻辑

知识回顾

  1. 1,创建Django
  2. mtv + Tabl
  3. pip install django == 2.0.10
  4. python manage.py startporoject
  5. python mange.py startapp 子应用名
  6. 注册子应用
  7. URL路由和模板渲染
  8. utls.py
  9. from django.utls import path, include
  10. urlpatterns是一个列表,负责路径匹配
  11. 匹配规则:从上至下,从左至右
  12. 有接口函数则返回数据,没有则返回404
  13. 模板渲染的方式
  14. render()
  15. 参数:request, template_name, context
  16. 语法:{{name}}
  17. 过滤器
  18. |过滤器的管道|
  19. 2,模板标签
  20. {% %}成对出现,诸如:block, load, url
  21. 3,模型基础
  22. 继承自models.Model
  23. ORM, MySQL数据库表之间的关系
  24. 属性--->字段
  25. 类型--->字段类型
  26. 常用命令
  27. python mange.py makemigrations [可以指定app] 生成迁移文件
  28. python mange.py migrate 执行迁移
  29. 4 常用查询及表关系
  30. all()
  31. get()
  32. filter()
  33. 表关系
  34. 一对多,一对一,多对多
  35. 外键关联
  36. book = models.ForeignKey('User', on_delete=models.CASCADE) # 级联删除,一删除则多也会删除---连根拔起
  37. 一对多查询的所有方法:多的一方类型名小写
  38. 5 博客小案例及模型内容的补充
  39. 实现登录注册功能,模板抽取(抽取静态页面)
  40. 静态页面和动态页面的区别
  41. 安全性,兼容性和版本问题
  42. 模型内容的补充:
  43. class Meta
  44. db_table = "数据库表名"
  45. def str():
  46. return self.name
  47. 请求和响应
  48. http超文本传输协议,应用层,明文, 无状态
  49. https同上,加密
  50. request, HttpResponse
  51. JsonResponse
  52. 状态保持
  53. cookiesession
  54. 表单
  55. Django自带,提交表单,cookie
  56. path 路径的参数
  57. method 指定请求方式,GET, POST
  58. form
  59. 6, 中间件及上下文处理器