第一讲
#从flask包中导入Flask对象
from flask import Flask
#使用Flask创建一个app对象,并且传递__name__参数
app = Flask(__name__)
#@app.route: 设置页面访问的url,这里是设置成一个根路径
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run()
第二讲
debug模式
- flask会在每次保存代码的时候自动加载代码,并且如果代码有错误,会在终端进行提示
配置文件
- 直接硬编码
app = Flask(__name__)
app.config['SECRET_KEY'] = "xxx"
- 把所有的配置项都放在一个模块中,例如settings.py,然后通过app.config.from_object()加载模块的方式进行配置。该方法既可以接收模块的的字符串名称,也可以模块对象。
# 1. 通过模块字符串
app.config.from_object('settings')
# 2. 通过模块对象
import settings
app.config.from_object(settings)
第三讲
URL与函数的映射
- 一个URL要与执行函数进行映射,使用的是@app.route装饰器。
@app.route('/article/<id>/')
def article(id):
return '%s article detail' % id
#其中<id>,尖括号是固定写法,语法为<variable>,variable默认的数据类型是字符串。
#如果需要指定类型,则要写成<converter:variable>,其中converter就是类型名称
构造URL(url_for)
- 知到一个函数名获取这个函数对应的URL,可以通过url_for()。
- url_for():接收函数名作为第一个参数,其他参数作为url查询参数添加到url的后面。
- 如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/article/<id>/')
def article(id):
return '%s article detail' % id
@app.route('/')
def index(request):
print(url_for("article",id=1))
return "首页"
指定methods方法
- 在@app.route()传入关键字参数methods来指定访问url的方法,get(从服务器中获取数据)或者post(把数据发给服务器)。
@app.route('/login/',methods=['GET','POST'])
def login():
return 'login'
页面跳转和重定向
-
参数传递的两种形式
- 作为url的组成部分:/book/1
- 查询字符串:/book?id=1
-
重定向两种方式:永久性重定向301,暂时性重定向302.
-
flask.redirect(location,code=302) :location表示需要重定向到URL,应该配合之前讲的url_for()函数来获取。code表示采用哪种重定向。
from flask import Flask,url_for,redirect
app = Flask(__name__)
app.debug = True
@app.route('/login/',methods=['GET','POST'])
def login():
return 'login page'
@app.route('/profile/',methods=['GET','POST'])
def profile():
name = request.args.get('name')
if not name:
# 如果没有name,说明没有登录,重定向到登录页面
return redirect(url_for('login'))
else:
return name
第四讲
模板简介
- 渲染网页的时候,并不只是渲染一个纯文本字符串,而是渲染一个富有文本标签的页面。
- 通过render_template方法渲染一个模板。
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/about/')
def about():
return render_template('about.html')
- 当访问/about/的时候,about()函数会在当前目录下的templates文件夹下寻找about.html文件。
- 如果想更改模板文件地址,应该在创建app的时候,给Flask传递一个关键字参数template_folder,指定具体的路径。
from flask import Flask,render_template
app = Flask(__name__,template_folder=r'C:\templates')
@app.route('/about/')
def about():
return render_template('about.html')
- 在模板中传递参数:使用字典进行包装,参数名字前加两个**号使其成为关键字参数。
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/about/')
def about():
# return render_template('about.html',user='zhiliao')
return render_template('about.html',**{'user':'zhiliao'})
第五讲
- 过滤器是通过管道符号( | )进行使用的。
- 过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。
第六讲
- 控制语句:所有的控制语句都是放在{% … %}中,并且有一个语句{% endxxx %}来进行结。常用的有if/for…in
{% if age > 18 %}
<div>您已成年!</div>
{% elif age < 18 %}
<div>您未成年!</div>
{% else %}
<div>您刚成年!</div>
{% endif %}
{% for book in books %}
<li>{{ book }}</li>
{% endfor %}
第七讲
- Flask中的模板可以继承,通过继承可以把模板中许多重复出现的元素抽取出来,放在父模板中,并且父模板通过定义block给子模板开一个口,子模板根据需要,再实现这个block.
- 父模版
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="base.css" />
<title>{% block title %}{% endblock %}</title>
{% block head %}{% endblock %}
</head>
<body>
<div id="body">{% block body %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2008 by <a href="http://domain.invalid/">you</a>
{% endblock %}
</div>
</body>
</html>
- 子模版
{% extends "base.html" %}
{% block title %}首页{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.detail{
color: red;
}
</style>
{% endblock %}
{% block content %}
<h1>这里是首页</h1>
<p class="detail">
首页的内容
</p>
{% endblock %}
- 模板中不能出现重名的block,如果一个地方需要用到另外一个block中的内容,可以使用self.blockname的方式进行引用
<title>
{% block title %}
这是标题
{% endblock %}
</title>
<h1>{{ self.title() }}</h1>
第八讲
- 静态文件的配置:通过url_for全局函数加载静态文件
<link href="{{ url_for('static',filename='about.css') }}">
第九讲
-
蓝图:url和视图在不同文件下编写。
-
蓝图文件
from flask import Blueprint
bp = Blueprint('user',__name__,url_prefix='/user/')
@bp.route('/')
def index():
return "用户首页"
@bp.route('profile/')
def profile():
return "个人简介"
- 主程序文件
from flask import Flask
import user
app = Flask(__name__)
app.register_blueprint(user.bp)
if __name__ == '__main__':
app.run(host='0.0.0.0',port=9000)