最近,搞了一台腾讯云的学生优惠服务器,不知道干什么。突然想到能够挂个网站,也想顺便学一下python(脚本之中我的最爱),就选择了轻量级的网站框架Flask。下面就简单的总结一下我的学习过程。
图书选择
在书的选择方面,依然决然的选择了《FlaskWeb开发:基于Python的Web应用开发实战》。理由有两个:一是,我有一定的Python基础,不用从零学习Python基础知识;二是,只有二百来页啊,页数少啊,能简单入门就可以了,太厚的书,太细节,不好找重点。
学习Flask基础部分开始
这一部分就是课本的第一部分,简单介绍了程序结构、模板、表单、数据库、电子邮件和大型程序的结构。这些都是构建程序的基础,这个必须得好好学习啊!打不好基础,就等于白浪费时间啊。
- 程序结构
学习程序结构,要求你着重学习Flask的基本结构,一个中心思想就是页面路由关联视图函数,每次请求都是由视图函数处理,视图函数返回字符串或者是返回渲染的页面。另外,函数定义时会有一行标记,用来说明导航的位置。视图函数结构如下:
@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return '<p>Your browser is %s</p>' % user_agent
index函数就是一个视图函数,@app.route(‘/’)一行是标记定义导航的位置为根目录。
启动服务器语句:
if __name__ == '__main__':
app.run(debug=True)
这种方式启动服务器,能够确保是执行该脚本启动的服务器,如果其他脚本引入该脚本,则不会启动服务器。
- 学习模板
Jinja2是一个强大的模板引擎。模板是一个包含响应文本的文件,其中包含占位变量表示的动态部分,其值只在请求的上下文中才能知道。使用真实值代替占位变量的过程叫做渲染,渲染模板的函数是render_template。模板长这样:
<h1>Hello {{name}}!/h1>
两个大括号中间的name就是一个占位变量。
同时,模板中还可以嵌入block语句块,用来界定页面的布局、占位填充或者是逻辑代码。如:
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}
有了占位块和占位变量的知识以后,我们就可以顺理成章地理解和运用Flask-BootStrap了。(这里不再详述了)
在实际开发中为了系统的友好性,常常设置错误页面。如,处理404或500等错误。Flask同样包含这样的设置,如下代码:
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'),404
@app.errorhandler(500)
def internal_server_error(e):
return reder_template('500.html'),500
有了上面代码,当系统遇到404或500错误时,系统会自动跳转到相应的错误界面。
这一部分还包含静态文件的路径获取和Flask-Moment本地化时间和日期的学习,由于比较简单繁琐,这里就简述到这。
学习web表单
python处理web表单使用了一个扩展Flask-WTF,它可以将处理表单的过程变得十分简单。
Flask-WTF使用一个给定的密钥生成加密令牌,再用令牌验证表单中数据的真伪,来避免遭受跨站请求伪造的攻击。密钥设置方式如下:app=Flask(__name__) app.config['SECRET_KEY']='your secret key'
开始设计一个表单。表单设置分为两步,第一步是设计表单类,第二步是在页面中设置布局。下面先设计表单类,将表单类简单地设计成包含一个输入框和提交按钮。代码如下:
class NameForm(Form): name=StringField('What is your name?',validators=[Required]) submit = SubmitField('Submit')
使用偷懒的方式建立表单页面,主要代码如下:
{% import "bootstrap/wtf.html" as wtf %} {{ wtf.quick_form(form) }}