我是怎么用flask开发个人博客的
主要介绍用python的flask web框架开发个人博客。。。
HymanLiuTS
年过而立,又酸又臭,忙时敲代码,闲时读书写文章。
展开
-
用flask开发个人博客(40)—— Flask中三种测试方法
一、单元测试并统计测试的覆盖率1.1 Flask中的单元测试 在之前的文章中介绍过在flask中进行单元测试的方法,目前我们的代码中存在下面的单元测试:classBasicTestCase(unittest.TestCase): def Setup(self): self.app=create_app('testing') self原创 2017-01-20 17:31:13 · 8544 阅读 · 0 评论 -
用flask开发个人博客(39)—— 在flask中定义Rest API
一、什么是Rest API Rest 是将业务逻辑从后端转移到前端的一种Web架构,它使用URL来定位Web中的资源,将资源的URL和其他一些信息封装成JSON或者XML格式,在客户端和服务端之间进行传递。它支持http协议中GET、POST、PUT、DELETE等一般方法,作为服务端,就是根据客户端的请求方法,调用实现定义好的API,通过这种方式,服务端不再关心业务逻辑,只需要原创 2017-01-19 17:26:07 · 4220 阅读 · 0 评论 -
用flask开发个人博客(38)—— 使用MarkDown实现博客文章存储成富文本格式
一、MarkDown语法 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Github中项目的MD文件就是用MarkDown语法进行编写,它内嵌支持Html,可以使用Html的大部分标签。我们使用构建博客表单body字段的PageDownFiled生成的是MarkDown格式的文本,在上一文中我们通过Flask-原创 2017-01-14 13:49:50 · 10202 阅读 · 0 评论 -
用flask开发个人博客(37)—— 使用Flask-pagedown实现博客文章预览的功能
一、引言 本文主要讨论的内容,是将我们写的纯文本的博客文章,使用Flask-pagedown模块,将文本转换成html富文本数据,并在浏览器上显示,类似于博客文章的预览功能。PageDown是用JavaScript实现的由文本到Html的转换程序,而Flask-pagedown是对PageDown的一个封装,把其集成到了Flask-WTF表单中。二、Flask-PageDow原创 2017-01-14 11:42:31 · 9112 阅读 · 1 评论 -
用flask开发个人博客(36)—— 使用SQLAlchemy对博客文章进行分页
我们在浏览某个博客网站时,如果博客文章过多,往往都进行了分页显示,比如CSDN中个人博客的首页显示。在flask中SQLAlchemy不但可以进行数据建模和数据查询等等,由于其支持分页查询,我们还可以利用其对我们的文章进行分页。一、创建博客数据模型 在介绍使用SQLAlchemy对博客进行分页之前,我们需要先创建博客的数据模型,并向数据库中插入试验用的博客的数据。我们将博客的原创 2017-01-12 23:39:24 · 4361 阅读 · 0 评论 -
用flask开发个人博客(35)—— flask中的上下文处理器app_context_processor
app_context_processor在flask中被称作上下文处理器,借助app_context_processor我们可以让所有自定义变量在模板中可见,如下面的代码,我们将email作为一个变量在所有模板中可见:@main.app_context_processordef admin_email(): email='879651072@qq.com' return d原创 2017-01-06 22:48:47 · 14692 阅读 · 0 评论 -
用flask开发个人博客(33)—— 使用itsdangerous进行账户的确认
我们在某个网站进行开户时,往往会收到网站发过来的确认邮件,只有点击确认邮件里面的链接后,我们所开的账户才能生效。本文主要介绍在flask中进行这种确认机制的方法。一、定义邮件发送的方法send_email 首先,我们在email.py中定义一个发送邮件的方法send_email:from flask_mail import Messagefrom app import原创 2017-01-04 22:31:46 · 3844 阅读 · 0 评论 -
用flask开发个人博客(32)—— 进行表单字段的验证
一、引言 本文主要讨论FlaskForm中各个表单字段的限制方法。我们在定义表单对象时,往往需要处理很多细节功能,诸如限制字段的长度,填写的email要符合格式等等。FlaskForm中提供了很多限制表单字段的方法。下面,我们将提供几种常用的方法进行讨论。 为了方便进行试验,我们定义一个RegisterForm的表单类,并在该类中定义试验的字段。class原创 2017-01-03 23:28:16 · 6828 阅读 · 0 评论 -
用flask开发个人博客(31)——用flask_login管理用户的登录
一、flask_login的安装 本文主要介绍使用flask_login管理用户的登录和登出。flask_login的安装:pip install flask-login二、User模型继承UserMixin 使用flask_login进行用户的登录和登出管理,需要将我们的User模型继承flask_login的UserMixin基类:from f原创 2017-01-02 22:27:05 · 22232 阅读 · 2 评论 -
用flask开发个人博客(30)—— 用WerkZeug实现密码的加密存储
一 引言 我们在进行用户的注册时,往往需要将用户输入的明文密码加密成密文进行存储。flask中使用WerkZeug模块可实现这一功能。WerkZeug中有两个方法:generate_password_hash(password)和check_password_hash(hash,password)。前者用来将明文密码加密,返回加密后的密文,用来进行用户注册。后者将明文和密文进原创 2016-12-24 12:22:08 · 3462 阅读 · 0 评论 -
用flask开发个人博客(29)—— 其他主要模块
前面介绍了几个基本的flask程序结构的模块,下面回顾下所有模块的功能:1. config.py:import osbasedir = os.path.abspath(os.path.dirname(__file__))class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess st原创 2016-10-22 11:23:32 · 2956 阅读 · 0 评论 -
用flask开发个人博客(28)—— 利用unittest进行单元测试
下面分析下这个webapp的单元测试模块test,请先看下目前test下的文件结构:目前__init__.py文件还是空,请查看test_basic.py的代码:import unittestfrom flask import current_appfrom app import create_app,dbclass BasicTestCase(unittest.TestCas原创 2016-10-21 21:56:35 · 6040 阅读 · 2 评论 -
用flask开发个人博客(27)—— 利用程序工厂函数创建Flask程序对象并注册蓝本
什么是程序工厂函数?请先看__init__.py的代码:from flask import Flask,render_templatefrom flask.ext.bootstrap import Bootstrapfrom flask.ext.mail import Mailfrom flask.ext.moment import Momentfrom flask.ext.sqlal原创 2016-10-21 14:57:47 · 4385 阅读 · 0 评论 -
用flask开发个人博客(26)—— 利用config.py配置文件动态的创建不同的Flask对象
对配置进行封装的目的是根据不同的使用场景,给flask的app赋予不同的config,最经典的用法就是把开发、测试和生成分开,通过配置文件使用不同的数据库。config.py代码如下: import osbasedir = os.path.abspath(os.path.dirname(__file__))class Config: SECRET_KEY =原创 2016-10-20 22:52:08 · 11648 阅读 · 2 评论 -
用flask开发个人博客(25)—— 博客程序结构介绍
从本文开始,我将对flask一个经典的大型程序结构进行分析,以巩固之前学习内容的目的。首先,展示下这个多文件Flask程序的基本结构:||- Myblog |- app |- templates |- static |- main |- __init__.py |- errors原创 2016-10-19 23:22:02 · 2717 阅读 · 0 评论 -
用flask开发个人博客(24)—— flask中使用Flask_Mail发送电子邮件
flask中使用Flask-Mail提供对电子邮件的支持,下面将分步骤测试flask中发送电子邮件的功能:1 配置SMTP服务器的信息 我们需要借助flask程序实例app的config属性来配置电子邮件的SMTP服务器信息,其中主要的配置选项包括服务器的地址MAIL_SERVER\端口号MAIL_PORT\用户名MAIL_USERNAME\密码MAIL_PASSWORD.下面以QQ原创 2016-10-07 10:02:03 · 3414 阅读 · 0 评论 -
用flask开发个人博客(23)—— flask中的数据模型关系
一、一对一关系 一个人和身份证之间的关系,一个人只有一个身份证,一个身份证也只有被一个人拥有。class Identification(db.Model): """ 身份证 """ __tablename__='idents' id=db.Column(db.Integer,primary_key=True) address=d原创 2016-12-15 22:59:02 · 4754 阅读 · 0 评论 -
用flask开发个人博客(22)—— 使用Flask-Migrate实现数据库的更新
使用Flsak-Migrate数据库迁移框架,可以保证数据库结构在发生变化时,改变数据库结构不至于丢失数据库的数据.使用其进行数据库进行数据库的迁移,主要分为三个步骤:1 创建数据仓库from flask.ext.migrate import Migrate,MigrateCommandfrom fask.ext.script import Manager...manager=M原创 2016-10-06 09:23:27 · 8391 阅读 · 2 评论 -
用flask开发个人博客(21)—— 在视图函数中操作数据库
前面一节中介绍了flask中数据库的管理方法,下面将介绍如何将这种方法应用到视图函数中test.py:@app.route('/', methods=['GET','POST'])def index(): form=NameForm() if form.validate_on_submit(): user= User.query.filte原创 2016-10-05 22:05:50 · 4264 阅读 · 3 评论 -
用flask开发个人博客(20)—— 利用模型创建数据库
下面可以利用前面创建的Role和User模型开始创建数据库了:1 导入test.py中的数据库模型db:>>> from test import db2 创建表:>>> db.create_all()3 删除表:>>> db.drop_all()4 插入行>>> from test import Role,User>>> admin_role = Role(name原创 2016-10-04 11:14:35 · 3503 阅读 · 0 评论 -
用flask开发个人博客(19)—— 数据模型的外键关系
SQL数据库中,两个表之间的关系表现为外键.在SQLAlchemy的模型中,也可以表现这种模型之间的关联关系. class Role(db.Model): __tablename__='roles' id = db.Column(db.Integer,primary_key=True) name = db.Colum原创 2016-10-03 23:06:25 · 4596 阅读 · 0 评论 -
用flask开发个人博客(18)—— 数据库模型的创建
FLASK-SQLAlchemy是flask中一个数据库管理类框架,它封装了对大部分数据库的支持,包括关系型数据库Mysql/Postgres/SQLlite,以及Redis/MongoDB等非关系型数据库,通过SQLAlchemy,我们可以不用再关心SQL语句的使用,只需进行将数据库建模,并像管理一个类对象一样管理数据库即可. 我们先进行数据库的建模,所谓建模就是创建一个类,那原创 2016-10-02 23:59:31 · 3703 阅读 · 0 评论 -
用flask开发个人博客(17)—— Flash消息
当我们登录摸一个网站时,输入用户名和密码,如果密码输入错误,点击确定按钮后经常会出现一条提示密码错误的消息。这个消息就是flash消息,主要用来提示用户当前操作的结果。flask中也有自己的flash消息,本文主要介绍flask中flash消息的用法。 首先,我们要先编写用户显示flash消息的html文件,为了简单演示,我们直接把放到html中,不再添加其他效果。flask开放了原创 2016-12-11 08:50:57 · 7543 阅读 · 0 评论 -
用flask开发个人博客(16)—— 表单类的使用
Flsk中扩展Flask-WTF对表单类进行了封装,我们通过继承Flask-WTF扩展中的Form基类,可以定义自己的表单类,类中每一个属性对应一个表单中的元素,如下面的类,我们定义了一个含有文本框和提交按钮的表单类: from flask.ext.wtf import Formfrom wtforms import StringField,SubmitFieldfrom wt原创 2016-10-01 21:06:26 · 3283 阅读 · 1 评论 -
用flask开发个人博客(15)—— flask中四种请求钩子
一 引言 flask中具有四种钩子被做成了修饰器,我们在后端可以进行调用做相关的操作.使用钩子函数时,我们需要借助flask的全局变量g.g作为中间变量,在钩子函数和视图函数中间传递数据.我们先引入全局变量gfrom flask import g 然后注册一个视图函数,用来显示g中的数据@app.route('/test')def t原创 2016-12-10 16:12:32 · 10036 阅读 · 0 评论 -
用flask开发个人博客(14)—— flask中本地化时间的引用
flask中使用Flask_Mement来本地化日期和时间,在test.py文件中需要这样引入Flask_Mement模块:from flask.ext.moment import MomentMoment(app)而在html中我们需要先引入moment.js和jquery.js两个js库,因为Flask_Mement需要依赖这两个库,我们在html文件中的head标签中进行引用:原创 2016-09-28 23:43:30 · 2473 阅读 · 2 评论 -
用flask开发个人博客(13)—— 链接静态资源
之前介绍过flask中查看路由映射关系的方法:>>> from test import app>>> app.url_mapMap([ user>, index>, ' (HEAD, OPTIONS, GET) -> static>, ' (HEAD, OPTIONS, GET) -> test>])上面的映射关系中,除了第三种之外都是我们在test.py中通过代码写入的映射关原创 2016-09-27 23:52:02 · 5416 阅读 · 0 评论 -
用flask开发个人博客(12)—— 自定义错误界面
flask中可自定义错误处理界面,如常见的404错误(客户端请求未知的页面或者路由),和500错误(服务器内部异常):test.py:@app.errorhandler(404)def page_not_found(e): return render_template('404.html'),404@app.errorhandler(500)def internal_原创 2016-09-26 23:24:32 · 2265 阅读 · 0 评论 -
用flask开发个人博客(11)—— 模板中代码的重复使用
一、宏的引用上节介绍过将宏保存到单独的html文件中,并重复引用的语法:{% import ‘macros.html’ as macros %}{% for comment in comments %} macros.render_comment(comment){% endfor %}通过宏定义到文件中,可以实现在其他文件中的重复利用,而且把宏集中到一个文件也原创 2016-09-20 22:44:10 · 2994 阅读 · 0 评论 -
用flask开发个人博客(10)—— Jinja2模板中的控制结构
前面介绍了Jinja2模板中的变量,下面介绍下模板中的控制结构。if语句:{% if condition %} ...{% else %} ...{% endif %}在模板文件中实现,输入用户名时浏览器上显示Hello 用户名,若不输入用户名显示Hello Stranger:test.html:{% if user %} Hello {{use原创 2016-09-19 22:57:39 · 3361 阅读 · 2 评论 -
用flask开发个人博客(9)—— Jinja2模板中的变量
在前面介绍过得{{ name }}结构表示一个变量,他是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取。在模板中可以识别所有类型的变量甚至是一些复杂的类型。test.html:A value from a dictionnary:{{mydict['key']}}A value from a list:{{mylist[2]}}A value from a原创 2016-09-18 23:16:38 · 9878 阅读 · 1 评论 -
用flask开发个人博客(8)—— flask中的模板
一般而言,视图函数中存在两种逻辑,业务逻辑和表现逻辑。业务逻辑诸如我们在登录页面时输入用户名和密码后,点击确定按钮时,在数据库验证该用户名和密码是否正确,表现逻辑就是返回的要显示的正确的html文件。业务逻辑和表现逻辑混杂在一起很容易导致代码的难以理解和维护。模板的引入就是为了解决这一问题,flask使用Jinja2模板引擎,将表现逻辑封装,使得业务逻辑和表现逻辑分离。flask中所使用的原创 2016-09-17 20:13:17 · 4407 阅读 · 0 评论 -
用flask开发个人博客(7)—— flask中设置和获取cookie
一 什么是cookie 什么是cookie?如果单单从数据结构的角度来说,它可以被理解成用来保存数据的一个dictionary,由一组组键值对组成.如果从作用上来说,我们知道Http协议是一种无状态的协议.什么叫无状态呢,就是本次的客户端请求不会保留上一次客户端请求的状态,简单点说就是这样会要求我们每次在浏览器中点开一个网站的链接都会输一次账户和密码.cookie就是用来解决原创 2016-12-10 08:50:14 · 24447 阅读 · 1 评论 -
用flask开发个人博客(6)—— 为flask程序添加命令行解释器
使用flask的方便之处在于可以使用大量的扩展功能,如数据库和用户认证都是通过扩展功能实现。打算开启flask时支持命令行选项,我们需要引入flask-script扩展。from flask.ext.script import Managerapp=Flask(__name__)manager=Manager(app)...if __name__=='__main__':原创 2016-09-16 18:32:07 · 4763 阅读 · 0 评论 -
用flask开发个人博客(5)——flask中的四种响应类型
在之前的代码中,视图函数都返回了一个字符串,在实际的开发中其返回的html文件内容,本质其实也是字符串。下面总结下flask中可以作为响应的几种方法。1、响应字符串。这个在前面已经说明过,但是需要指出的是,其实每次视图函数在响应时还可以附带状态码。比如状态码为200,表示请求已经被成功处理。状态码为400,表示请求无效。@app.route('/')def index():原创 2016-09-16 17:59:55 · 7957 阅读 · 0 评论 -
用flask开发个人博客(4)—— flask中4种全局变量
一 current_app current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法:1.1 激活程序上下文>>> from test import app>>> from flask import current_app>>> from flask import g原创 2016-12-08 00:28:43 · 31050 阅读 · 2 评论 -
用flask开发个人博客(3)—— flask中的请求和视图函数映射
flask中通过修饰器对路径和视图函数进行了映射,如在映射当前路径时,通过了以下语句@route('/'): def index(): ... return ...上面是python中修饰器的语法。修饰器可以对函数进行封装,可以通过修饰器进行做一些在调用函数时必须做的一些操作。将函数通过修饰器进行修饰之后,再次调用该函数就不会再单纯的调用之前该函数原有的原创 2016-09-15 22:36:03 · 5802 阅读 · 0 评论 -
用flask开发个人博客(2)—— Flask中的请求对象request
在介绍flask中的request之前,先简单介绍下python中的ThreadLocal对象。ThreadLocal,故名思义,就是线程中的全局变量,最近才接触这个概念,之前在C++和C#中还没遇到过这个东西。首先看下下面的代码: import threadinglocalobj=threading.local()def threadfunc(name): l原创 2016-09-15 07:37:53 · 7644 阅读 · 0 评论 -
用flask开发个人博客(1)—— 一个简单的flask程序
1、创建flask程序实例from flask import Flaskapp=Flask(__name__)Flask接受一个字符串作为参数,这个参数决定程序的根目录,以便于能找到相对于程序根目录的资源文件的位置,通常这种情况下都使用 __name__作为Flask参数。2、创建路由映射@app.route('/')def index(): return原创 2016-09-14 22:32:37 · 11863 阅读 · 2 评论