1/添加is_like
记录一下点赞,
2/先找到用户点赞过的评论编号,然后获取用户所有点赞过的评论编号
3/判断用户是否有对评论点过赞
if 用户需要登录 and 该评论编号 in 用户点赞过的评论编号里面
操作思路:
1/判断用户是否登录
2/获取参数
3/参数校验,为空校验
4/操作类型进行校验
5/通过评论编号查询评论对象,并且判断是否存在
6/根据操作类型点赞&取消点赞
判断用户是否有对该评论点过赞,
如果没有的话创建点赞对象,添加到数据库中(虽然前面我们设置了自动提交,但是我们还是手动提交一下,因为自动提交是在所有的视图函数走完之后进行提交,会有延迟,还有一种情况就是用户暴力点赞测试,导致提交不及时)
如果有点赞,删除用户点赞,然后点赞数量减一
7/返回响应
1/如果该用户没有点赞,那么图标显示灰色,如果该用户进行了点赞,那么图标变亮,如果按下取消点赞.
2/监听到点赞的事件,那么点赞的个数+1,给按钮加上属性,变亮;监听到取消点赞事件,那么点赞的个数-1,给按钮取消属性,变灰
3/图标后面如果是没有人点赞的时候,显示"赞";如果从数据库中查找出点赞数量,那么显示点赞的个数.
蓝图三部曲
1/创建用户蓝图对象
profile_blue = Blueprint("profile",__name__,url_prefix="/user")
2/装饰视图函数
@profile_blue.route('/info')
3/将用户蓝图注册到app中
在导入的时候,要注意导入蓝图在注册的前面,不能在这个文件一开始就导入,因为容易造成循环导入
app.register_blueprint(profile_blue)
需要继承基类,然后改写其中部分数据
开头写{% extends '基类模板地址' %}
1/重写标题部分
2/重写script
部分
3/重写正文部分
4/因为用户中心没有热门新闻的排行,因此我们需要将这一部分取消,只需要重写基类的rank
部分,然后内容不填,即可取消
操作流程:
1/判断请求方式,如果是get请求
2/携带用户数据,渲染页面
3/如果是post请求
4/获取参数
5/校验参数,为空校验
6/修改用户的数据
7/返回响应
接口文档:
请求路径: /user/base_info
请求方式:GET,POST
请求参数:POST请求有参数,nick_name,signature,gender
返回值:errno,errmsg
参数解释
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
nick_name | string | 是 | 昵称 |
signature | string | 是 | 签名 |
gender | string | 是 | 性别,MAN/WOMAN |
返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
error | int | 是 | 错误码 |
errmsg | String | 是 | 错误信息 |
操作流程:
1/判断请求方式:
2/如果是get请求,携带用户的数据,渲染页面
3/如果是post请求,获取参数
4/校验参数,为空校验
5/上传头像,判断图片是否上传成功
6/将图片设置到用户对象,
7/返回响应
接口文档:
请求路径: /user/pic_info
请求方式:GET,POST
请求参数:无, POST有参数,avatar
返回值:GET请求: user_pci_info.html页面,data字典数据, POST请求: errno, errmsg,avatar_url
参数解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
avatar | file | 是 | 头像 |
GET返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
render_template | 页面 | 是 | 渲染页面 |
data | 字典 | 否 | 用户字典 |
data内容描述:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
user_info | list列表 | 是 | 渲染到页面的字典数据 |
POST返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
error | int | 是 | 错误码 |
errmsg | String | 是 | 错误信息 |
data | 字典 | 否 | 头像字典 |
data内容描述:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
avatar_url | string | 是 | 用户头像 |
图片存储:
1/自己搭建文件存储系统,比如使用FastDFS
1.需要自己来维护图片的名字
用户A,图片A
用户B,图片A
如果用户A,B的图片名字一样的,但是内容不一样,后上传的覆盖先上传的
2.用户A,图片A
用户B,图片B
如果用户A,B用户上传的图片名字不一样的,但是内容一样,如果保存两份,就浪费存储空间
2/使用第三方的工具SDK
特点:
1.可以节省自己的存储空间
2.七牛云可以维护我们的图片名字,自动去重
七牛云的使用
1/注册,创建直接的图片存储空间
2/安装扩展包pip install qiniu
3/将官方的文档全部拷贝到我们的项目中
操作流程:
1/判断请求方式,如果是get请求
2/直接渲染页面
3/如果是post请求,获取参数
4/校验参数,为空检验
5/判断老密码是否正确
6/设置新密码
7/返回响应
接口文档:
请求路径: /user/pass_info
请求方式:GET,POST
请求参数:GET无, POST有参数,old_password, new_password
返回值:GET请求: user_pass_info.html页面,data字典数据, POST请求: errno, errmsg
POST参数解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
old_password | string | 是 | 旧密码 |
new_password | string | 是 | 新密码 |
GET返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
render_template | 页面 | 是 | 渲染页面 |
POST返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
error | int | 是 | 错误码 |
errmsg | String | 是 | 错误信息 |
操作流程:
1/获取参数,p
2/参数类型转换,方便我们做分页查询
3/分页查询收藏的新闻
4/获取分页对象属性,总页数,当前页,当前页对象列表
5/将对象列表,转成字典列表
6/拼接数据,渲染页面
接口文档:
请求路径: /user/ collection
请求方式:GET
请求参数:p(页数)
返回值: user_collection.html页面
参数解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
p | int | 否 | 页数 |
返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
render_template | 页面 | 是 | 渲染页面 |
get请求中没有请求体,我们获取参数的时候不能利用data了,而是利用ajax的传递,获取参数request.args
即可
script,link和image标签等都是一个get请求
操作流程:
1/判断请求方式,如果是get,
2/携带分类数据渲染页面
3/如果是post,获取参数
4/校验参数,为空校验
5/上传图片,判断是否上传成功
6/创建新闻对象设置属性,
7/保存到数据库
8/返回响应
接口文档:
请求路径: /user/news_release
请求方式:GET,POST
请求参数:GET无, POST ,title, category_id,digest,index_image,content
返回值:GET请求,user_news_release.html, data分类列表字段数据, POST,errno,errmsg
GET返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
render_template | 页面 | 是 | 渲染页面 |
data | 字典 | 否 | 分类字典 |
POST参数解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
titile | string | 是 | 新闻标题 |
category_id | int | 是 | 新闻分类 |
digest | string | 是 | 新闻摘要 |
index_image | file | 是 | 索引图片 |
content | string | 是 | 新闻内容 |
POST返回值解释:
参数名 | 类型 | 是否必须 | 参数说明 |
---|---|---|---|
error | int | 是 | 错误码 |
errmsg | String | 是 | 错误信息 |
1/当我们不知道request后面从哪里获取数据的时候,我们可以断点调试,打印request,然后在打印的菜单里可以看那个参数里面携带了数据,比如args里面有数据,那么就直接取args就好了,如果是files有数据,那么我们就获取files的数据就好了.
2/了解:ajaxSubmit
属于表单提交,采用这种方式就是为了方便我们对富文本的处理
3/all([表达式1,表达式2.....])
只有所有的表达式为True
的时候,那么返回的才是True
,否则都是False
4/子评论显示有两种方式,一种是子评论显示在上面,父评论显示在下面(虎扑,斗鱼)
另一种是父评论显示在上面,子评论显示在下面(朋友圈的样式)
优质文章推荐: