day56-flask框架基础

1最小flask应用

1.1安装flask

virtualenv --no-site-packages flaskenv8
pip install flask

然后新建一个空文件夹,用pycharm打开,然后在空文件夹中创建一个py文件

1.2最小应用

from flask import Flask
app = Flask(__name__)
@app.route('/hel/')
def hello():
    return 'hello wrold'
if __name__ == '__main__':
    app.run()

最小应用代码注释
1.导入Flask类
2.生成一个flask的对象,传入name参数,表示模块名或包名
3.告诉服务器,访问127.0.0.1:5000/hel/地址可触发hello方法;类似django中的urls.py文件的功能
6.直接启动本文件,才执行app.run()

1.3启动最小应用

if __name__ == '__main__':
    ip = sys.argv[1]
    port = sys.argv[2]
    app.run(host=ip, port=port, debug=True)

host代表启动时的ip地址;port代表启动的端口;debug代表启动的模式,debug=True为调试模式; ctrl+s后会自己启动项目。
可以直接用1.2节中的app.run()直接启动应用,但是,这样就不能修改ip和端口,而用本方法能够修改ip和端口。启动指令为python hello.py 0.0.0.0 82(文件名+ip+端口)

1.4使用manage启动文件

先安装flask_script库

pip install flask-script

设置manage

from flask import Flask
from flask_script import Manger
manage=Manage(app)
@blue.route('/hello/')
def hello():
    return '还有几天放假
if __name__ == '__main__':
    manage.run()

manage = Manager(app):管理flask应用对象app
启动命令

python manage.py runserver -h 0.0.0.0 -p 80 -d

-h 表示ip地址 ;-p表示端口 -d表示debug模式
flask-script - 管理启动命令
flask-blueprint - 管理路由地址

2拆分视图函数

背景:模块化管理路由地址
安装蓝图库

pip install flask-blueprint

初始化蓝图对象,并使用对象管理路由

blue = Blueprint('first', __name__)

管理路由:@blue.route('/hello/')

@blue.route('/hello/')
def hello():
    return '还有几天放假'

在manage页面注册蓝图

app.register_blueprint(blueprint=blue, url_prefix='/app')

第一个参数为引入的blue对象,第二个参数为路由的前缀;
当页面出现cannot import 。。(不能导入某数据时)原因为两个页面出现互相引用

3路由规则

在flask中也可以在路由后面接参数;格式为<转换器:参数>
表示接受的id值为int类型
表示接收的name参数为string类型,可简写为类型
表示接收的num参数为浮点类型
表示接收的uid参数为uuid类型值
表示接收的p变量为路径

@blue.route('/stu//')
def stu(id):
    print(type(id))
    return 'hello stu id:%d' % id

@blue.route('/name//')
def stu_name(name):
    print(type(name))
    return 'welcome stu:%s' % name

@blue.route('/float//')
def float_num(num):
    print(type(num))
    # return 'float num:%s' % num #将小数当成字符串输出
    return 'float num:%.2f' % num   将小数保留两位小数输出

@blue.route('/get_uuid/')
def get_uuid():
    import uuid
    return 'uuid:%s' % str(uuid.uuid4())

@blue.route('/uuid//')
def uid(uid):
    return 'uid:%s' % uid

@blue.route('/path//')
def get_path(p):
    return 'path:%s' % p

4重定向

重定向分为直接重定向和反向解析重定向两种

4.1直接重定向

@blue.route('/redirect_hello/')
def redirect_hello():
    return redirect('/app/hello/')

直接重定向由路由的绝对路径构成

4.2反向解析重定向

反向解析重定向由url_for来完成,其形式为url_for('生成蓝图的第一个参数.重定向的函数名'),又可分为无参跳转和有参跳转两种

@blue.route('/redirect_hello/')
def redirect_hello():
    return redirect(url_for('first.hello'))

@blue.route('/redirect_hello/')
def redirect_hello():
    return redirect(url_for('first.float_num', num=10.1))

5错误抛出与捕获

1导包:from flask import abort
2使用:abort(500)
捕获:@blue.errorhandler(500)
抛出错误码时,错误码必须符合http定义的状态码,且抛出的错误码要符合运用场景

@blue.route('/index/')
def index():
    try:
        1/0
    except Exception as e:
        abort(500) # 抛出500错误
    return 'hello'

抛出错误并捕获500错误
@blue.errorhandler(500)
def error_500(e):
    return 'exception :%s' % e

6页面渲染

html模板文件需存在于templates文件夹下,且templates和manage.py文件同级

@blue.route('/my_index/', methods=['GET', 'POST', 'PATCH'])
def my_index():
    if request.method == 'GET':
        return render_template('index.html')
    if request.method == 'POST':
        pass

页面渲染:render_template('index.html')
请求方式:@blue.route('/my_index/', methods=['GET', 'POST', 'PATCH']),不写methods时默认为get

7请求与响应

7.1获取前端传回的数据

当为get请求方式时,获取从前端传回的参数使用args获取
request.args.get(key)
request.args.getlist(key)
前者只获取一个值,后者会将所有传递过来参数名为key的组成一个列表返回
当请求方式为post/put/patch/delecte时,获取数据用form获取
request.form.get(key)
request.form.getlist(key)
同args一样,前者也只取一个值,后者取key对应的所有值并组成一个列表

7.2获取请求方式

request.method

7.3获取路由

request.path

7.4获取cookie

request.cookies

7.5获取文件

request.files

7.6响应

创建响应:make_response(响应内容,响应状态码),状态码默认200,可不写
设置cookie: 响应对象.set_cookie(key, value, max_age)
删除cookie:响应对象.delete_cookie(key)
响应字符串

@blue.route('/response/', methods=['GET'])
def get_response():
    res = make_response('

2019

', 200) return res

响应模板文件

@blue.route('/response/', methods=['GET'])
def get_response():
    html = render_template('index.html')
    res = make_response(html, 200)
    res.set_cookie('token', '09876543210', max_age=100)
    res.delete_cookie('token')
    return res

你可能感兴趣的:(day56-flask框架基础)