Web框架
什么是web:
协助开发者快速开发web应用程序的一套功能代码
开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码
Web开发的优点:
避免重复
稳定性和可扩展性强
可以降低开发难度,提高开发效率
常见的Web框架:
Flask
: 小型
Django
: 功能全面
Tornado
:专门写接口
MVC
:三个层面,
Flask
简介:Werkzeug
工具箱编写的轻量型Web开发框架,本身相当于一个内核,几乎所有功能都需第三方扩展,没有默认数据库(Mysql
或Nosql
)。WSGI
工具箱采用Werkzeug
,板块引擎用的是Jinja2.flask
的核心
常用扩展包:
• Flask-SQLalchemy:操作数据库;
• Flask-script:插入脚本;
• Flask-migrate:管理迁移数据库;
• Flask-Session:Session存储方式指定;
• Flask-WTF:表单;
• Flask-Mail:邮件;
• Flask-Bable:提供国际化和本地化支持,翻译;
• Flask-Login:认证用户状态;
• Flask-OpenID:认证;
• Flask-RESTful:开发REST API的工具;
• Flask-Bootstrap:集成前端Twitter Bootstrap框架;
• Flask-Moment:本地化日期和时间;
• Flask-Admin:简单而可扩展的管理接口的框架
Hello World程序
#导包
from flask import Flask
#实例化app
app=Flask(__name__)
app.config['DEBUG']=True
#配置路由,网址、URL
#@app.route('/index/a/b/c')#路径需要一致,需要在后面加/index/a/b/c
#配置加载方法
#1.通过对象加载(最常用,方便)
#from month04.study.config import * #导入对象文件.py
#app.config.from_object(DevConfig) #from_object(对象)
#2.通过文件加载(不太常用)
#app.config.from_pyfile('a.txt')#from_pyfile(文件).txt
#3.通过环境变量加载(几乎不用)
#app.config.from_envvar('envvar') #from_envvar(添加的环境变量key值)点小箭头>>编辑配置env...var>>+>> #envvar(自己定义的name)>> a.txt(自己用的value)
@app.route('/')
#视图函数
def index():
return '<h1>Hello World</h1>'
#程序入口项目启动
if __name__ == '__main__':
# app.run(debug=True,port=5001,host='192.168.43.74')
app.run(port=5001,host='192.168.43.74')#端口号可改,但是一般要改成更大的,且此端口不能被占用 #地址也可改,但是地址需要有效(不能乱写)!!
此程序会从上往下运行,运行到app.run(不会再向下执行),会再次重新从上往下运行,然后停到app.run,之后调用哪个函数执行哪个,不会执行其它代码
路由定义
# 指定路由地址:指定访问路径为demo1
@app.route('/demo1')
def demo1():
return 'demo1'
# 路由传参:
@app.route('/user/<形参>')
def user(形参):
return 。。
# 指定请求方式:@app.route('/demo2', methods=['GET', 'POST'])
# methods:后跟方法,默认是GET(大写,否则可能出错),后面必须跟列表,里面写什么方法 只能 用什么方法
视图常用逻辑
返回JSON:在使用Flask写一个接口的时候需要给客户端返回JSON数据,在Flask里面可以直接使用jsonify生成一个JSON响应
from flask import jsonify
。。。 return jsonify(列表套字典类型)
http
状态码
2开头:2** 请求成功
3** 页面跳转
4**(404 不存在地址) 客户端错误
5**(500服务器代码错误) 服务器错误
重定向:redirect
,url_for
,可传参
不用url_for时候,返回值为路由:return redirect('路由地址('/login')')
redirect传参:return redirect('/login/xv/14')直接写在路由中
用url_for时候,返回值为函数名称 return redirect(url_for('函数名称('login')'))
url_for传参:return redirect(url_for('hello',name='xx',age=15))以形参=XX的形式传参
异常捕获
errorhandler 装饰器
# 注册一个错误处理机制,当程序抛出指定错误状态码时候,就会调用该装饰器方法
# demo:统一给500的错误提示
@app.errorhandler(500)
def internal_server_error(e):
return '服务器搬家了'
请求钩子
第一次请求前:@app(实例化的对象).before_first_request
每次请求前: @app.before_request
没抛出错误的每次请求后: @app.after_request
无论有没有错误,每次请求后: @app.teardown_request
状态保持
http
是一种无状态协议,浏览器每次请求都是无状态的
无状态:每一次用户请求时,浏览器、服务器都无法知道用户之前做过什么,无法与上一次的请求相联系
实现状态保持主要两种方式:客户端:cookie 服务器:session
Cookie:某些网站为了辨别用户身份,进行会话跟踪而储存在本地的数据