1、C/S和B/S架构
C/S:客户端/服务器
B/S:浏览器/服务器
2、B/S架构工作原理
客户端(浏览器) <=> WEB服务器(apache/nginx) <=> WSGI <=> Python(Flask)
1、简介
flask是一个非常小的Python Web框架,被称为微型框架,只提供了一个强健的核心,其他功能都是通过扩展来实现的,意味着可以根据项目的需求量身打造。
2、组成
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
@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')
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
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,视图函数,负责业务逻辑的处理