- 先分析表,对表进行设计,标清具体的对应关系(1对1还是1对多还是多对多) 用到Abstracter,所以需要在,settings里面进行配置
- 注册功能
- 静态文件配置,路由,视图函数,用forms组件,写MyRegForm.指定前端的字段(返回到前端是Input框,有bootstap样式,就要加上form-control 类)及钩子函数
- 前端:
- 头像的,希望点一个图片,然后就可以上传头像成功(change事件+文件阅读器),读文件异步(IO操作),用到onload,等待加载完毕才会展示,
- 数据输入完成,给按钮绑定点击事件,发送
ajax
请求,既有普通键值,又有文件,考虑使用formdata
对象, 用serializerArray
,文件对象需要手动添加
- 后端:
- 正确逻辑:注册函数,产生form对象,定义空字典(ajax请求)判断是否合法,**打散数据,所以键必须和字段名字相同,头像的文件对象判断一下是否存在,然后创建用户,更新数据库。
- 错误逻辑:用字典保存错误信息,通过ajax回调函数可以看到标签的名字,手动拼接,拿到错误信息的字符串,用has-error渲染一下。
- 登录功能
- 路由,视图函数,前端页面
- 前端:
- 用户名,密码,图片验证码
- 图片验证码,点击图片就不一样
- 登录按钮绑定点击事件,发送
ajax
请求(用户名,密码,验证码)
- 回调函数,对字典中的信息进行判断,将错误信息渲染出来
- 后端
- 图片验证码,单独一个视图函数,随机验证码储存到session中,用于其他的视图函数使用
- 拿到用户名、密码、验证码,判断验证码,在判断用户名和密码是否正确,成功就保存登录状态,判断一些错误信息,保存到msg中
- 首页信息展示
- 路由,视图和前端页面
- 前端:
- 导航条,bootstrap样式,左右加(2-8-2)中间的布局方式,左右加面板,
- 登录成功,展示用户名和更多操作,没有登录,展示登录注册,加一个判断,然后把这两部分分别放进去,把登录、注册和注销分别绑定相关的Url
- 动态效果的都在
js
插件中,加入一个模态框,用于设置修改密码界面,内容写在模态框中,写错了还是渲染错误信息,提交按钮绑定点击事件,发ajax
请求,注意发送的数据,还有跳转到,set_password页面,csrf
- 后端:
- home页面,直接返回home页面
- logout页面(判断用户是否登录,用到login_required,在settings中加入配置),直接用注销内置函数,
- set_password页面,登录认证先,字典,
ajax
,post
验证,校验两次密码是否一致,老密码,正确就保存更新数据库,字典中加入一个url
字段,用于成功之后跳转到登录页面,然后错误信息加到字典中,返回前端
- 后台管理:在
admin
中注册各个模型表,就可以实现增删改查四个页面,添加文章、文章分类、文章标签,然后录入数据,注意要在用户表中关联对应的blog
- 首页展示文章列表:
- 后端home拿到所有文章列表,加一个分页组件,然后在home函数中写分页逻辑
- 前端用媒体对象列表对文章进行信息展示,用到Bootstrap,文章用循环生成,文章标题,头像,简介,发布日期,点赞,评论数
- 首页用户头像
- 前端直接拿到相应的avatar字段,然后还需要把上传的文件资源放到专门的文件夹下面,同时在设置中配置相关路径,但是还需要把这个文件夹暴露出来,固定写法,在路由中加一个类似有名分组的url,然后再在前端拼出相关的路径,
- 个人站点
- 先加一个404页面,图片放到本地,防止图片防盗链
- 后端:
- 登录的话,拿到所有文章
# 表中的__str__方法
'''
用于在admin后台页面中,重写print方法,让打印结果更可视化,比如写一个 __str__ ,在后台中返回名字,不加的话是一个对象:Blog object、Category object等
'''
def __str__(self):
return self.username
# 用户头像没显示出来
'''
错误原因是没有在admin 中把用户和个人站点表绑定起来。其实在使用跨表查询、子查询等拿到的字段,遇到问题,应该首先去admin后台中看看,是否把用户和个人站点绑定起来了。
'''