Python后台开发----Django基础实现

1.随机选取
功能:随机从数据库选目标显示在前台
定义 urls ,models 等
这里我定义了一个 user表里面有三个用户如下
在这里插入图片描述
当然这是通过后台管理员添加同步到数据库中
在 views视图中写入函数
在这里插入图片描述
detail.html

在这里插入图片描述
可以看出,q 对应的 context 中的 q
随机拿出两个对象获取他们的 name 属性
效果如下
在这里插入图片描述
在这里插入图片描述
每刷新一次,重新随机选取一次
context 用来传参

2.筛选条件
同样在 views文件中
在这里插入图片描述
请注意:传入参数只能是字典形式
上图中 q 是对象,q.query 是 python查找语句对应的 sql 查找语句。如下
在这里插入图片描述
其中

    select  *  from  练习_user  where id=1   等价于 
    User.objects.get(id=1)
    ‘练习’ 是我的数据库名
    注意: get()只能返回一个对象,
    要返回一堆的话用  User.objects.all()  或  filter(加限定条件)

index.html
在这里插入图片描述
结果图
在这里插入图片描述

2.评论功能
目的:用户登陆后完成评论,评论对他人可见,并被保存在数据库中
应用: form 表单 , views 视图 , index.html
这里我们只需要修改前面代码
(1)增加评论类并同步到数据库与后台
注意:当完成一整个项目时,models 一定要写全,否则后面添加很麻烦
在这里插入图片描述

    这里返回的 self.content 只有调用 Comment.objects.all() 时才会返回评论对象,这里
    返回的是 评论内容; 如果是 self.name 则返回评论人名字
    后面会有例子

(2)增加表单(和 views.py 同级)
forms.py
在这里插入图片描述
这里定义的字段和 comment 类字段相同
记得在 admin.py添加

           admin.site.register(Comment)

views.py 修改为
在这里插入图片描述
index.html (在 body 中写入 )
在这里插入图片描述

这里是一定要说道说道的,使用 comment 将 Comment类实例化成对象;
form 表单默认使用 post 方法,接着实例化 Commentform类,判断 form对象是否存在,
如果存在保存在数据库,不存在返回空;最终以参数方式传入 index.html;
而 index中第二行是为了防止跨站请求伪造攻击
效果如下
在这里插入图片描述
写入信息保存后提交,仍然能看到写入信息,并且mysql数据库内也有

  这里context内写入 comment 只是为了验证  Comment 类的返回字段
  去掉后就不会返回 comment对象

我们随机验证一下
在这里插入图片描述
数据库
在这里插入图片描述
附:如果想要返回其他类的属性字段, 只需要在 context 参数中写入并展现在 HTML页面上即可

3.权限更改与继承
(自定义Users和Groups组继承django自带的User和Groups)

我们知道 Django 后台管理默认给增加的模型3个权限,增加,修改,删除;
在django 2.0 之后有查看功能,那么如果这4个权限不够,就需要我们手动添加了。

(1)自定义权限
先导入模块

  from  django.contrib.auth.models import  Group,AbstractUser 
  这是两个 django自带权限管理模块,就是我们进入 admin 后看到的认证和授权

定义model
在这里插入图片描述
分别是管理员和管理员组模型,权限里面,第一个是权限名,第二个是权限功能;
再同步到 admin.py中
在这里插入图片描述
并在 settings.py 中添加

  AUTH_USER_MODEL='zan.Users'
  zan 是 app名称    Users是第一个继承模型

进行模型更改和数据库迁移

   python  manage.py  makemigrations
   python  manage.py  migrate

定义视图函数检验,在 index.html 中写入
在这里插入图片描述
运行后看到
在这里插入图片描述
列出所拥有的全部权限
(2)设置自动添加管理员组
在 view.py 中写入函数,并重新定义一个路由
在这里插入图片描述
因为我们设置了多对多关联,所以可以在管理员组中添加管理员

(3)后台查看
输入admin
在这里插入图片描述
这里有一些我之前定义的模型,我们看到管理员和管理员组都存在
分别进入查看
在这里插入图片描述
在这里插入图片描述
我们拥有 django 自带的全部权限和我们定义的新权限
当然我们可以通过

 python  manage.py  shell  进行检测
 导入模型
 Users.objects.get(username='xxx')  获取管理员对象
 Users.objects.get(username='xxx').has_perm('appname.权限名‘)   
 判断是否拥有该权限  返回布尔值
 Users.objects.get('username='xxx').user_permissions.all()
 获取该管理员的所有权限

 Groups.objects.get(name='xxx')      获取管理员组对象
 Groups.objects.get(name='xxx').permissions.all()    获取管理员组的所有权限 
 Groups.objects.get(name='xxx').permissions.clear()  清除管理员组的所有权限

 user对象.user_permissions.clear()       清除管理员所有权限
 user对象.user_permissions.add/remove(权限对象)  增加,删除管理员的权限
 权限对象通过导入django自带的Permission模块
 Permission.objects.get(codename='xxx')   获得权限对象 ,
 必须是一个对象而不是查询集
 
 user对象.groups.remove/add(组对象)   管理员增加,删除自己所处的管理员组
发布了105 篇原创文章 · 获赞 11 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章