flask web
文章平均质量分 86
sjk1996
好好学习
展开
-
17 用docker打包flask web程序
一.安装docker网上有很多教程, 就不多说了安装完记得测试是否安装成功: &docker version 二.把程序文件夹拷贝到一个单独的文件夹中 我在桌面新建了一个空文件夹docker_flask, 并把程序文件flask拷贝到了docker_flask中: 三.创建Dockerfile文件1)进入到docker_flask的目录, 创建Dockerfile文件2)编辑Doc...原创 2018-06-29 17:20:09 · 6818 阅读 · 1 评论 -
11.1 为博客添加显示和提交文章的功能
一. 修改|-app/models.py Web程序的所有用户的文章存储在数据库里, 每一篇文章就是数据库中的一条记录, 包括文章主体,发布时间, 作者的id等属性。class Post(db.Model): __tablename = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Co...原创 2018-04-13 21:12:38 · 786 阅读 · 0 评论 -
11.5 为博客添加固定链接
我们有时候希望和朋友分享自己的博客, 所以我们要为每一个博客添加一个唯一的链接以供分享使用。一. 修改|-app/-main/views.py@main.route('/post/<int:id>')def post(id): post = Post.query.get_or_404(id) return render_template('post.html', po...原创 2018-04-18 22:26:29 · 654 阅读 · 0 评论 -
11.5 在服务器上处理富文本
上节我们讲到使用Flask-PageDown, 把wtf表单中的PageDownField字段中输入的的markdown文本转换成html预览显示在字段下方, 但是我们点击提交按钮时提交的是在表单中填写的markdown文本, 而不是html文本, 所以我们就得想办法把用户提交的markdown文本转换为html文本保存在数据库中。一. 修改|-app/models.pyfrom mark...原创 2018-04-18 22:08:33 · 387 阅读 · 0 评论 -
11.4 使用Flask-PageDown支持富文本文章
我们编辑长文章的时候, 单一的文本格式便满足不了要求, 于是我们使用PageDown,PageDown的作用是使用javascript实现客户端markdown到html的程序转换。 Flask-PageDown把PageDown集成到wtf表单中, 换言之就是使用javascript把wtf中的markdown转换成html。一. 安装扩展flask-pagedown, markd...原创 2018-04-18 20:33:07 · 1408 阅读 · 0 评论 -
12.1 高级多对多关系
一. 一对多关系 我们前面讲了两个一对多关系:角色和它所对应的用户, 用户和它所对应的文章, 在一对多关系中, 我们在‘一’的这边设置db.relationship, 在‘多’的一边设置一个外键。二. 多对多关系 而数据库除了一对多关系之外还有多对多关系。最常见的是学生选课这个多对多关系, 一个学生可以选择多门课程, 一门课程也可以被多个学生选择, 如果我们在学生这边添加外键显然行不通...原创 2018-04-22 15:53:25 · 462 阅读 · 0 评论 -
10.4 用户头像
通过显示用户头像, 我们可以进一步改进资料页面的外观。一. 修改|-app/modelsclass User(UserMixin, db.Model): avatar_hash = db.Column(db.String(32)) #1 def __init__(self, **kwargs): super(User, self).__init__(...原创 2018-04-10 21:35:47 · 224 阅读 · 0 评论 -
11.3 如何为我们的博客列表增加分页导航
一. 修改|-app/-main/views.py 我们之前访问主页路由时, 会返回数据库中所有的文章, 这样显得页面很庞大复杂, 于是我们对文章进行分页显示。@main.route('/', methods=['GET', 'POST'])def index(): form = PostForm() #... page = request.args.get('...原创 2018-04-14 17:11:08 · 212 阅读 · 0 评论 -
9.2 角色验证——根据权限访问视图函数
我们的web程序用户有不同的角色——普通用户, 管理评论的人, 权限最高的管理员。 不同的权限可以浏览不同的页面, 权限越大, 可以浏览的页面就越多。 本节我们为试图函数添加权限限制, 使其只可以被管理员或评论管理员访问。————————————————————————————————————一. 修改|-app/-main/views.py@main.route('/admin')...原创 2018-03-21 21:24:22 · 448 阅读 · 0 评论 -
10.2 设计用户编辑资料页面
我们应该给用户提供编辑自己资料的功能。我们来梳理一下如何实现这个功能, 首先我们应该建立一个修改用户资料的表单, 有了这个表单以后就得有一个路由来返回该表单, 如果是get请求则直接返回渲染该表单的模板; post请求修改资料, 并且返回用户资料页面;最后在用户资料页面添加一个修改资料的了解即可。一. 添加表单|-app/-main/forms.pyfrom flask_wtf import Fl...原创 2018-03-26 11:13:31 · 3815 阅读 · 0 评论 -
10.3 设计管理员资料编辑页面
一. 编写表单类——|-app/-main/forms.pyclass EditProfileAdminForm(FlaskForm): #首先创建表单字段, 管理员可以修改任何用户的任何属性 email = StringField('Email', validators=[DataRequired(), Length(1, 64), Email()]) userna...原创 2018-04-08 15:58:22 · 537 阅读 · 0 评论 -
10.1 编写用户页面
我们访问不同用户的页面, 显示不同的信息, 但是用户页面的大体架构都是相同的, 这是怎么做到的呢?其实我们只要编写一个用户页面user.html, 然后返回模板的时候把当前登录的用户current_user作为参数传进模板, 模板就会显示该用户的各个属性, 不同用户的属性不同, 显示的内容也就不尽相同了。一. 为User表增加属性#为了使用户资料更丰富一些, 我们为用户增加几个属性:from fl...原创 2018-03-24 21:21:57 · 366 阅读 · 0 评论 -
11.2 如何在Web程序开发的过程中创建大量虚拟数据库记录
一. 安装forgerypy包&pip install forgerypy二. 修改|-app/models.py1. 修改User表class User(UserMixin, db.Model): #... @staticmethod def generate_fake(count=100): import forgery_py ...原创 2018-04-13 21:32:45 · 307 阅读 · 0 评论 -
11.6 博客文章编辑器
本节我们为Web程序添加编辑文章的功能。一. 修改|-app/-main/views.py@main.route('edit/<int:id>')@login_requireddef edit(id): post = Post.query.get_or_404(id) if current_user != post.author and not cu...原创 2018-04-19 16:22:32 · 300 阅读 · 0 评论 -
12.2 在资料页中显示关注者
一. 修改|-app/templates/user.html 我们想在用户资料页面增加几个栏目如下: 对应的功能举例说明如下: 如果已登录的用户A(有关注权限的话)访问别的用户B的页面: 如果A未关注B, 显示一个Follow按钮, 点击关注B, 如果A已经关注B, 显示一个Unfollow按钮, 点击取消关注B; ...原创 2018-04-24 17:29:26 · 236 阅读 · 0 评论 -
16 把flask python web程序部署到heroku平台上
一. 安装git&sudo apt-get install git二. 把完整的web程序放到一个新目录里面比如说我已经有一个完整的web应用, 它里面有这些文件:然后创建一个Heroku_pro文件夹, 把上面所有的文件都放进去, 放进去以后检查一下:三. 在Heroku_pro目录下生成一个git仓库这时你会发现目录下多了一个.git:四. 把当前目录下的所有文件托管到本地git仓库五...原创 2018-06-29 16:53:12 · 865 阅读 · 0 评论 -
14.5 分页大型资源集合
对大型资源来说, 获取集合的GET请求消耗很大, 而且难以管理。 和Web程序一样, Web服务也可以对集合进行分页。一.app/api_1_0/posts.py@api.route('/posts/')def get_posts(): page = request.args.get('page', 1, type=int) pagination = Post.query.pag...原创 2018-06-10 17:22:56 · 162 阅读 · 0 评论 -
14.4 实现资源端点
本节我们来实现用于处理不同资源的路由。一. app/api_1_0/posts.py@api.route('/posts/')def get_posts(): posts = Post.query.all() return jsonify({'posts': [post.to_json() for post in posts]})@api.route('/post/&...原创 2018-06-10 16:34:54 · 238 阅读 · 0 评论 -
15.1 获取代码覆盖报告
编写单元测试有两个目的: 实现新功能时, 单元测试能够确保新添加的代码按预期方式运行。 每次修改程序后, 运行单元测试能保证现有代码的功能没有退化。编写测试组件很重要, 但知道测试的好坏更重要。 代码覆盖工具用来统计单元测试检查了多少程序功能, 并提供一个详细的报告, 说明程序的哪些代码没有测试到。 这个信息非常重要, 因为它能指引你为最需要测试的部分编写测试。一. 安装代码覆盖工具cover...原创 2018-06-15 16:26:26 · 314 阅读 · 0 评论 -
14.3 资源和JSON之间的转换
JSON是http请求和响应使用的传输格式, 那么Web服务就应该实现以下两个功能: 把资源转换成json数据——发送给客户端 把json数据转换成资源——把客户端发送过来的json数据转换成资源存储在数据库中一. 把资源转换成json数据1) app/models.pyclass Post(db.Model): #... def to_...原创 2018-06-07 19:34:07 · 364 阅读 · 0 评论 -
14 使用Flask提供REST Web服务
一. 创建API蓝本 REST API相关的路由是一个自成一体的程序子集, 所以为了更好的组织代码, 我们最好把这些路由放到独立的蓝本中。1)API蓝本的结构|-flasky |-app/ |-api_1_0 |-__init__.py |-users.py |-posts.py |-comments.py |-authenticatio...原创 2018-06-14 16:35:52 · 1486 阅读 · 0 评论 -
14.2 基于令牌的认证
上节我们介绍了基于http的认证, 由于客户端每次发出请求时都要发送密令, 为了避免老是发送敏感信息, 我们可以提供一种基于令牌的认证方案。一. 修改app/models.pyclass User(db.Model): #生成认证令牌 def generate_auth_token(self, expiration): s = Serializer(c...原创 2018-06-07 16:26:58 · 1651 阅读 · 0 评论 -
14.1 使用Flask-HTTPAuth认证用户
最近几年, Web程序有种趋势, 那就是业务逻辑越来越多的移到了客户端一侧, 开创出了一种称为富互联网应用(RIA)的架构。在RIA中, 服务器的主要功能是为客户提供数据存取服务。 在这种模式中, 服务器变成了Web服务或应用编程接口(API) RIA可采用多种协议与Web服务通信, 最近几年REST崭露头角。 Flask是开发REST架构Web服务的理想框架, 本章我们了解如...原创 2018-06-05 16:20:45 · 5778 阅读 · 1 评论 -
12.3 在首页显示所关注用户的文章
一. 我们想添加的功能 之前我们完成了用户之间的相互关注, 我们想在首页增加一个选项如下图: 如果已登录用户访问主页, 我们给两个选项卡, 点击All选项, 显示数据库中所有的文章; 点击Followers选项卡, 显示当前用户所关注的用户的文章和自己的文章。 那我们如何实现上述功能? 答案是我们借助cookie(ps:http://blog.csdn.ne...原创 2018-04-25 20:09:28 · 461 阅读 · 0 评论 -
13.2 管理评论
本节我们为Web程序实现管理评论的功能。我们的大体思路如下:如果登录的用户有管理评论的权限, 在导航栏添加一个管理评论的导航。点击导航, 路由函数moderate进行处理, 返回moderate.html页面页面内容包括标题, 评论, 页面导航。并且在_comments.html里为每条评论添加两个标签enable和disable控制评论的显示与否。由路由moderate_enable和moder...原创 2018-05-09 20:00:51 · 684 阅读 · 0 评论 -
13.1 显示和提交评论
本节我们要为Web程序添加显示和提交评论的功能。一. 创建Comment表 评论存在数据库中,因此我们要创建一个Comment表来存储评论:class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) body = db.Colu...原创 2018-05-09 16:05:37 · 573 阅读 · 0 评论 -
9.1 为我们的角色划分权限
在第五章数据库的时候, 我们创建了Role表,并创建了不同的角色。不同的角色要有不同的权限, 本节我们来为角色划分权限。————————————————————————————————一.为我们的角色划分权限我们知道, 社交博客应该具有以下权限:操作位值关注用户0x00000001 (0x01)在他人文章发表评论0x00000010 (0x02)写文章0x00000100 (0x04)管理他人发表...原创 2018-03-20 16:52:14 · 642 阅读 · 0 评论 -
8.4 注册新用户
——————————————————————前言————————————————————————————本节讲解如何为我们的web程序添加注册新用户的功能。————————————————————————————————————————————————————一. 修改|-app/-auth/forms.pyfrom flask_wtf import FlaskFormfrom wtform...原创 2018-03-13 20:48:09 · 889 阅读 · 0 评论 -
8.6 如何限制未认证用户访问有权限网页
——————————前言——————————————上节我们讲了注册时向用户发送确认邮件, 确认成功把用户的confirm属性值改为1, 默认为0.本节我们来利用这个confirm值来做些文章, 让未确认的用户登录以后不能看到主页, 显示一个页面提醒用户未确认账户, 让用户登录邮箱确认账户, 或者是选择重新发送确认邮件。——————————————————————————一. 修改|-app/-a...原创 2018-03-19 16:36:59 · 574 阅读 · 2 评论 -
4.1 附表——WTForms支持的表单字段和字段验证函数
一. WTForms支持的HTML标准字段字段类型说明StringField文本字段, 相当于type类型为text的input标签TextAreaField多行文本字段PasswordField密码文本字段HiddenField隐藏文本字段DateField文本字段, 值为datetime.date格式DateTimeField文本字段, 值为datetime.datetime格式Integer...原创 2018-02-26 16:16:40 · 1573 阅读 · 0 评论 -
2.1 创建最简单的web程序
—————————————————-————————知识点———————————————————————1. 初始化 所有的Flask程序都必须创建一个程序实例, 这个程序实例就是Flask类的对象。客户端把请求发送给Web服务器, 服务器再把请求发送给Flask程序实例, 然后由程序实例处理请求。 创建程序实例: from flask import Fl原创 2018-01-30 11:30:28 · 763 阅读 · 0 评论 -
1.1 使用虚拟环境
———————————————————flask就是一个包, 是一个创建web应用程序的包—————————————安装Flask最便捷的方式是使用虚拟环境。虚拟环境: 是python解释器的一个私有副本, 在这个环境中你可以安装私有包, 而且不会影响系统中安装的全局python解释器。安装虚拟环境的原因:* 1. 为每个程序单独创建虚拟环境可以保证程序只能访原创 2018-01-29 20:43:40 · 303 阅读 · 0 评论 -
3.5 自定义错误页面
—————————————————————————前言——————————————————————————像常规路由一样, Flask允许程序使用基于模板的自定义错误页面。——————————————————————————————————————————————————————最常见的错误代码有两个: 1. 404, 客户端请求未知页面时显示 2. 500, 有未处理的异常时显示一....原创 2018-02-08 12:00:20 · 1628 阅读 · 0 评论 -
3.4 使用Flask-Bootstarp集成Twitter Bootstrap
—————————————————————————前言——————————————————————————Bootstrap: Twitter开发的一个开源框架, 它提供的用户组件可用于创建整洁且具有吸引力的网页, 这些网页还能兼容所有现代web浏览器。Bootstrap只是客户端框架, 不会直接涉及服务器。 服务器需要做的只是提供引用了Bootstrap层叠样式表(CSS)和Javasc原创 2018-02-03 16:35:01 · 419 阅读 · 0 评论 -
3.3 模板中的控制结构
————————————————————————前言———————————————————————————就像python语言中有if for 函数等控制结构, 模板中也有类似的控制结构, 本节我们来介绍4种控制结构。——————————————————————————————————————————————————————一. 条件控制语句{% if user %} H原创 2018-02-01 16:14:13 · 207 阅读 · 0 评论 -
3.2 模板中的变量
一. 模板中不同类型的变量Jinja2能识别所有类型的变量, 除了前面章节提到的字符串,还可以识别一些复杂的类型, 例如:列表, 字典和对象。 实例如下: A value from a dictionary: {{ mydict['key'] }}. #变量是字典mydict A value from a list: {{ mylist[3] }}. #原创 2018-02-01 15:42:24 · 273 阅读 · 0 评论 -
3.1 为什么要使用和如何使用模板
一. 为什么要使用模板 视图函数有两个作用, 一个是业务逻辑一个是表现逻辑, 举例说明: 用户在网站注册了一个新账号, 用户在表单中输入电子邮件地址和密码, 点击提交按钮, 服务器接收到包含用户输入的请求, 然后Flask把请求分发到处理注册请求的视图函数。 这个视图函数需要访问数据库, 添加新用户(业务逻辑), 然后生成相应回送浏览器(表现逻辑)。原创 2018-01-31 22:49:09 · 622 阅读 · 0 评论 -
2.5 Flask扩展
—————————————————————————前言——————————————————————————Flask被设计为可扩展形式, 只提供了web程序必备的核心功能,故没有提供一些重要功能, 如数据库和用户认证。这样的好处是开发者可以只有自由选择合适的包。社区人员开发了大量不同用途的扩展, 本节就来讲解如何把扩展整合到程序中。—————————————————————————原创 2018-01-31 21:53:04 · 216 阅读 · 0 评论 -
2.4 响应
——————————————————————前言————————————————————————————Flask调用视图函数以后, 会将其返回值作为响应的内容。 本节我们来介绍4种响应。第一种响应:@app.route('/')def index(): return 'Bad Request', 400实例的返回语句有两个返回值, 第一个是简单字符串, 第原创 2018-01-31 16:37:01 · 189 阅读 · 0 评论 -
2.3 请求调度和请求钩子
第一部分 请求调度前面说过, 程序实例通过路由来处理请求——路由就是URL和视图函数的映射。那么我们如何查看Flask程序中的URL映射? 我们可以看到我们使用app.route修饰器定义的两个路由。 中间那个映射是Flask添加的特殊路由, 用于访问静态文件, 详情见第三章。括号里的HEAD, OPTIONS, GET是请求方法, 这样不同的请求方法发送给原创 2018-01-31 15:47:13 · 426 阅读 · 0 评论