点击星标设置或取消。
- 为包含星星图标的a标签添加href
- 在urls.py为星标创建一个新url,url包含参数str字符串类型的project_type和int类型的project_id。
path('set_star///', views.set_star, name='set_star')
- 视图函数就得多两个参数接收
def set_star(request, project_type, project_id):
- 在html中就得记得传参
- project_type是用来区分:星标我创建的、星标我参与的、我创建的、我参与的,这样传到视图函数时,就不用再判断是什么类型的项目了,直接从数据库中查找更新.update(is_star=True)
来自武Sir的提醒:为了避免坏分子通过url修改其他人的星标,在视图函数中查找的时候,filter多加一个当前登录用户id的条件。
2. 申请加入与消息列表申请加入
- 做申请加入按钮,就得做消息列表,做消息列表就得先做消息表数据库。
- 先写一个消息的模型类,若想要两个字段同时关联同一个外键,就必须加related_name,否则会报错,related_name用于反向查找。
- search视图函数只用了get,我们利用好它,将通过POST向search提交申请
用ajax提交表单,
自动序列化只需在data: $(‘定位到form’).serialize(),
手动序列化时需在字典中添加一条csrf_token的数据,
这边手动序列化是以为要把申请人,接收人,项目id一起传到视图函数。
csrfmiddlewaretoken:'{{ csrf_token }}',
否则会出现Forbidden (CSRF token missing or incorrect.)
因为自动序列化的时候,它帮我们添加进去了。
- 注意:ajax发过来的字典值都是str类型,需要int类型需手动强转一下
- 申请加入按钮事件写完了,数据也可以存到数据库中,接下来是消息显示。
消息显示
- 想到消息显示时,我才发现好多表同样也需要时间字段,我就都加上了,文档里都有,就直接扣过来了。
- 当样式使用float时,位置会被占用,所以在使用float的元素外面套一层
- 点击同意或拒绝要做哪些动作:
只要进来了,就把该消息设置read为True,所以要传消息id
判断是同意还是拒绝,所以要传同意还是拒绝的标识
如果为同意,则增加一条项目成员表的数据,项目人数+1,并在消息表添加一条同意的消息(同意/拒绝写在content里)发给申请者;
如果为拒绝,则直接在消息列表添加一条拒绝消息发给申请者
同意和拒绝判断之前再加个消息类型判断,申请和邀请的同意时,增加项目成员的数据user_id是不一样的
我敲!好像传个消息id和是否同意就可以了!我在搞什么东西啊!重改一下,我像个睿智。。。
传那么多东西是没必要的,但是后台做的数据操作都是必要的。
- 在申请加入中,多加了一个判断,如果已存在该团队,返回False,阻止重复申请。
10.添加了忽略消息按钮,即将该消息设置为已读,不在消息列表中显示。



