Flask

本文详细介绍了轻量级Web框架Flask,包括它的基本概念、优点、常见Web框架对比。接着深入讲解了Flask的Hello World程序、路由、视图、状态保持、Cookie与Session、模板引擎、ORM、蓝图、数据上传、密码加密、分页和图片验证码等核心功能,还涉及了如何通过扩展实现更多功能。
摘要由CSDN通过智能技术生成

Web框架

什么是web:

​ 协助开发者快速开发web应用程序的一套功能代码

​ 开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码

Web开发的优点:

​ 避免重复

​ 稳定性和可扩展性强

​ 可以降低开发难度,提高开发效率

常见的Web框架:

Flask : 小型

Django : 功能全面

Tornado :专门写接口

MVC:三个层面,

Flask

简介Werkzeug工具箱编写的轻量型Web开发框架,本身相当于一个内核,几乎所有功能都需第三方扩展,没有默认数据库(MysqlNosql)。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服务器代码错误)  服务器错误
重定向:redirecturl_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:某些网站为了辨别用户身份,进行会话跟踪而储存在本地的数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值