Flask学习1:简介

Flask入门

web工作原理

1、C/S和B/S架构

​ C/S:客户端/服务器

​ B/S:浏览器/服务器

2、B/S架构工作原理

​ 客户端(浏览器) <=> WEB服务器(apache/nginx) <=> WSGI <=> Python(Flask)

Flask框架

1、简介

​ flask是一个非常小的Python Web框架,被称为微型框架,只提供了一个强健的核心,其他功能都是通过扩展来实现的,意味着可以根据项目的需求量身打造。

2、组成

  1. 测试、路由、WSGI系统
  2. 模板引擎(jinja2, 是flask核心开发组人员开发)

3、安装

pip install flask

4、完整程序

# 导入类库
from flask import Flask

# 创建实例
app = Flask(__name__)

# 视图函数
@app.route('/')
def index():
    return '<h1>Nice dandan</h1>'

# 启用实例
if __name__ == '__main__':
    app.run()

# 浏览器测试:http://127.0.0.1:5000/

5、启动参数

app.run(debug=True, threaded=True, port=8001, host=’0.0.0.0’)

6、请求与响应

变量或对象

请求钩子函数

7、视图函数

说明:

无参路由

# 无参路由

@app.route('/test2/')
def test2():
   return 'This is test2 page!'

带参路由

# 带参路由,参数写在<>中

@app.route('/welcome/<name>/')
def welcome(name):
   return 'Hello, %s~' % name

指定参数类型,如string(默认)、int、float、path(参数中的/不再作为分隔符)
@app.route('/user/int:uid')
  def show(uid):
      return '%d 号,Nice' % uid

测试path

 @app.route('/path/path:p')
 def path(p):
   return p

'''
说明:
   1.路由末尾的'/'建议加上,需要的时候,浏览器会自动加上,输入时加不加都可以
   2.若需要指定参数,将参数写在<>中,视图函数参数要与路由参数一致
   3.若需要知道参数类型,如int/float/path等,写在参数前,用‘:’与参数隔开
   4.不指定类型,参数默认是string,path其实也是字符串,只是'/'不再作为分隔符
'''  

8、请求(request)

python

请求

@app.route(‘/request/’) 
def req(): 
# 完整的url请求地址 
# return request.url
# 基础的url(除了参数以外的url,即不包括get参数)
# return request.base_url

# 主机地址和端口号
# return request.host_url

# 只有路由信息(只包含装饰器中的路由地址)
# return request.path

# 请求方式
# return request.method

# 客户端的ip地址
# return request.remote_addr

# 获取get参数
# return request.args['name']

# 获取请求头
return request.headers['User-Agent']

9、响应

# 响应
@app.route('/response/')
def response():
    # 默认状态码200
    # return 'Nice'

    # 在响应的后面指定状态码
    # return 'Page not found', 404

    # 先构造一个响应(也可以指定状态吗),然后返回
    resp = make_response('这是通过函数构造的响应', 404)
    return resp

10、重定向(redirect)

# 重定向
@app.route('/redirect/')
def new():
    # return '新的内容'
    # 重定向,需要指定一个路由地址
    # return redirect('/response/')

    # 根据视图函数,反向的构造出来路由地址,传递的参数是视图函数
    # return url_for('req')

    # 构造带参数的路由,直接写在后面即可
    # return url_for('welcome',)
    return redirect(url_for('welcome',))

11、终止(abort)

# 抛出指定错误
@app.route('/abort/')
def err():
    # 使用abort函数,不是说控制权就归你了,
    # 他只是向系统抛出了指定的异常,
    # 异常的处理仍然会按照框架中写好的方式进行
    abort(404)
    return 'abort测试'

# 定制错误页面
@app.errorhandler(404)
def page_not_found(e):
    return 'Not found'

12、会话控制(cookie/session)

# 设置cookie
@app.route('/set_cookie/')
def set_cookie():
    resp = make_response('cookie已设置')

    # 设置cookie
    resp.set_cookie('name', '小啊念')
    return resp

# 获取cookie
@app.route('/get_cookie/')
def get_cookie():
    return request.cookies.get('name') or 'Stranges'


# 设置session
# 设置密钥,用于加密解密的字符串,不只是用于session
app.config['SECRET_KEY'] = '123456'

# 设置session
@app.route('/set_session/')
def set_session():
    session['user'] = 'Likesea'
    return 'session已设置'

# 获取session
@app.route('/get_session/')
def get_session():
    return session.get('user', 'Strangers')

flask-script扩展

1、简介

​ 简单来说就是一个flask终端运行的解析器;因为在测试完项目后,最好不要改动任何代码,

否则可能会带来风险,所以借助扩展库实现启动,通过传递参数完成不同的启动。

2、安装

pip install flask-script

3、使用

# 导入类库
from flask_script import Manager

# 创建对象
manager = Manager(app)

# 启用实例
if __name__ == '__main__':
    manager.run()

# 启动:python manage.py runserver

4、启动参数

-? / --help :查看启动设置帮助
-h / --host :指定主机
-p / --port :指定端口
--threaded  :启动多线程
-d  :开启调试模式
-r  :代码修改后自动加载

# 实例:python manage.py runserver -d -r

蓝本(blueprint)

1、说明:

​ 当代码越来越复杂时,将所有的视图函数放在一个文件中很明显是不合适的,如果能够根据功能模块进行划分,存储在不同的文件中,蓝本就是为解决此问题而生的。

# 导入类库
from flask import Blueprint

# 创建蓝本对象
user = Blueprint('user', __name__)

# 添加路由(视图函数)
@user.route('/login/')
def login():
    return '登陆'


# 注册蓝本,未注册的蓝本处于休眠状态(无法使用)
from user import user

# 可以通过url_prefixl指定路由前缀
app.register_blueprint(user, url_prefix='/user')

扩展

1、MVC

​M:model, 模型,数据模型

V:view, 视图,负责数据展示

​C:controller, 控制器,负责业务逻辑的扩展

2、MTV

​M:model,模型,数据模型

​T:templates, 模板,负责数据展示

V:view function,视图函数,负责业务逻辑的处理

标签:Flask 发布于:2019-10-21 14:02:58