摘要: 1. 获取参数cid(分类id)/page(页数)/per_page(当前页上所展示数据) 2.将接受到的参数转为int型 3.根据分类id查询数据库 4.按照新闻分类进行过滤,按照新闻发布时间倒序排序,分页展示,每页10条数据 5使用分页对象获取分页后的数据 6.定义容器, 遍历分页后的新闻对象, 阅读全文
posted @ 2018-06-07 14:20 exchange<> 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 1.尝试获取用户的登录状态 2.获取新闻id(news_id)和action(行为) 3.接受到的参数news_id有可能不是int类型,把它转为int型 4.通过action参数判断有没有被收藏 5.通过查询数据库获取到news 6.判断用户选择收藏还是取消收藏 7.将得到的结果提交到数据库 8. 阅读全文
posted @ 2018-06-07 14:07 exchange<> 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 1.判断用户的登录状态. 2.获取news_id(新闻的id) 3.判断查询结果 4.如果结果存在点击次数加1 5.将点击量提交到mysql数据库 6.返回结果到新闻网站首界面 阅读全文
posted @ 2018-06-07 14:00 exchange<> 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 1.获取用户手机号,用户输入的图片验证码内容, 图片验证码编号 2.判断参数完整性 3.判断手机格式 4.从redis中获取图片验证码的内容 5.判断获取结果是否存在 6.删除图片验证码 7.对比用户输入的图片验证码(将其转换成小写,保持与数据库中的格式一致) 8.查询mysql数据库判断手机号是否 阅读全文
posted @ 2018-06-06 14:29 exchange<> 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 1. 获取mobile(手机号), sms_code(短信验证码), password(密码) 2.检查参数完整性 3.检查手机号格式是否正确 4.从redis数据库当中获取到短信验证码 5.与用户输入的短信验证码作对比 6.对比成功,删除redis数据库中的短信验证码 7.从mysql数据库中查询 阅读全文
posted @ 2018-06-06 14:17 exchange<> 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 一 : 生成图片验证码: 1. 获取参数, 前端生成的图片验证码uuid(图片名称) 2. 检验参数是否存在(name图片名称,text验证码,image图片) 3.调用扩展包生成验证码, 4. 将验证码内容保存在redis中 uuid作为key, 同时在接口当中设置 contentType 为: 阅读全文
posted @ 2018-06-05 19:54 exchange<> 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 1. 当点击了注册按钮后, 前端生成UUID随机值,作为GET请求参数; 2.后端通过接口接受参数判断是否为空,如果有内容进行下一步, 3.调用工具类生成验证码图片和内容, 4.将验证码内容使用redis保存到本地,前端传入的uuid作为key, 设置content-type为'image/jpg' 阅读全文
posted @ 2018-06-05 00:31 exchange<> 阅读(1996) 评论(0) 推荐(0) 编辑
摘要: 浏览器解析页面, 携带uuid向服务器发送请求获取图片, 服务器生成图片验证码, 返回图片本身给浏览器, 客户端根据图片输入验证码内容, 把输入的内容发送给服务器, 服务器对比输入的验证码是否正确.根据前端传入的uuid从redis中获取唯一图片验证码名称. 服务器: 图片, 图片内容验证码存在于r 阅读全文
posted @ 2018-06-03 21:25 exchange<> 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 当多个模板具有相同的顶部/底部内容/部分内容时,可以使用这三者来实现 宏是一个函数, 返回一个模板或者html字符串 定义宏 调用宏 不支持多继承 为了便于阅读,在子模板中使用extends时,尽量写在模板的第一行。 不能在一个模板文件中定义多个相同名字的block标签。 当在页面中使用多个bloc 阅读全文
posted @ 2018-06-02 20:29 exchange<> 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 过滤器本质是函数 作用: 不仅需要输出变量的值, 还需要修改变量的显示. 使用方式: 变量名|过滤器 常用内置过滤器: 字符串操作 safe:禁用转义 capitalize:把变量值的首字母转成大写,其余字母转小写 lower:把值转成小写 upper:把值转成大写 title:把值中的每个单词的首 阅读全文
posted @ 2018-06-02 20:23 exchange<> 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 视图函数的作用是 : 处理业务逻辑和返回响应内容. 在开发中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本,这个时候使用模板,让它来承担返回响应的内容,能够使代码结构清晰,耦合度低 模板是一个包含响应文本的文件,flask中常用的是Jinja2这个模板引擎来渲染模板 渲染就是使用真实值 阅读全文
posted @ 2018-06-02 20:17 exchange<> 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 使用单元测试的目的: 检验实际结果与预期结果之间的差别. 实际上就是通过assert来断言结果 阅读全文
posted @ 2018-06-02 19:56 exchange<> 阅读(83) 评论(0) 推荐(0) 编辑
摘要: Blueprint是一个存储操作方法的容器, Flask通过Blueprint来组织URL以及处理请求 1>> 一个应用场景中可以使用多个Blueprint 2>> 可以将一个Blueprint注册到任何一个未使用的URL下比如: "/" "sample" 或者子域名 3>>在一个应用中, 一个模块 阅读全文
posted @ 2018-06-02 19:44 exchange<> 阅读(725) 评论(0) 推荐(0) 编辑
摘要: cookie : 为了识别用户身份, 记录浏览历史. 以键值对的形式存在于浏览器当中. 由服务器端生成, 发送给客户端. 纯文本信息, 基于域名安全, 不同域名的cookie 之间不能互相访问 同源策略. 设置cookie: from flask import Flask, make_respons 阅读全文
posted @ 2018-06-01 14:17 exchange<> 阅读(151) 评论(0) 推荐(0) 编辑
摘要: abort() --只能抛出遵循http协议的状态码, 配合 errorhandler装饰器 来给用户显示友好的界面 阅读全文
posted @ 2018-06-01 12:00 exchange<> 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 数据库迁移: 就是更新数据库 应用更新了,数据库要更新, 但是不能删除之前的数据库, 就要用到迁移 步骤 : 1: python xxx.py db.init 生成迁移文件夹 2 :python xxx.py db migrate -m '注释" 生成迁移文件(类似于备份) 3.python xxx 阅读全文
posted @ 2018-06-01 11:47 exchange<> 阅读(160) 评论(0) 推荐(0) 编辑
摘要: ORM 对象关系映射 : 1> 建立两个模型 roles 和 user 两者关系是一对多 2> 在user(多的一方)中添加roles(一方)的id作为外键, 两者形成关联 3> 如果两者之间要实现一对多和多对一的查询, 就在 roles(一方)当中建立一对多的对象, 使用relationship( 阅读全文
posted @ 2018-06-01 10:22 exchange<> 阅读(187) 评论(0) 推荐(0) 编辑
摘要: request就是请求的意思, 常用的请求方式有GET, POST, GET 请求 用于从服务器获取资源数据, POST 请求用于向服务器端提交数据. GET请求参数保存在URL地址中,POST的数据是隐藏的,所以POST 请求比GET请求安全. 涉及到安全,就要说一下csrf(跨站请求伪造) 原理 阅读全文
posted @ 2018-06-01 10:12 exchange<> 阅读(457) 评论(0) 推荐(0) 编辑