初步Flask框架

快速使用flask

第一步首先下载Flask模块

第一个模块程序

#引用 Flask模块
from flask import Flask
# 创建flask对象
app = Flask(__name__)

#生成url 为index
@app.route('/index')
def index():
    #页面返回hello world
    return 'hello world'

#使用main函数
if __name__ == '__main__':
    #使用app.run开启程序
    app.run()

总结:

  • flask框架是基于werkzeug的wsgi实现,flask自己没有wsgi。
  • 用户请求一旦到来,就会之 app.__call__ 方法 。
  • 写flaks标准流程
  • flask的session是保存在:加密的形式保存在浏览器的cookie上。

Flask设置___________

Flask路由请求

@app.route('/login',methods=['GET','POST'])
def login():
	pass
#动态路由
@app.route('/login/<name>') 
def login(name):
    print(type(name))
    return render_template('login.html')

#支持正则表达式的路由
from flask import Flask,render_template
app = Flask(__name__)
from werkzeug.routing import BaseConverter 
class RegConverter(BaseConverter):
    def __init__(self, map, regex):
        super().__init__(map)
        self.regex = regex
app.url_map.converters['regex'] = RegConverter
@app.route('/index/<regex("d+"):x1>') 
def index(x1):    
return render_template('index.html')
if __name__ == '__main__':
     app.run()

视图

FBV视图路由的两种写法

def index():
    return render_template('index.html') 
app.add_url_rule('/index', 'index', index)

# 公司里一般用这种方式 
@app.route('/login') 
def login():
    return render_template('login.html')

CBV视图的两种写法

from flask import Flask,render_template,views
app = Flask(__name__,)
def test1(func):
    def inner(*args,**kwargs):
        print('before1')
        result = func(*args,**kwargs)
        print('after1')
        return result
    return inner
def test2(func):
    def inner(*args,**kwargs):
        print('before2')
        result = func(*args,**kwargs)
        print('after2')
        return result
    return inner

class UserView(views.MethodView):
    methods = ['GET',"POST"]
    decorators = [test1,test2]
    def get(self):
        print('get')
        return 'get'
    def post(self):
        print('post')
        return 'post'
app.add_url_rule('/user', view_func=UserView.as_view('user')) # endpoint
if __name__ == '__main__':
    app.run()

路由加载的源码流程

  • 将url和函数打包成为 rule 对象
  • 将rule对象添加到map对象中。
  • app.url_map = map对象

路由的参数

@app.route('/login',methods=['GET','POST'],endpoint="login")
def login():
	pass
	
# 注意:endpoint不能重名

获取提交的数据

from flask import request

@app.route('/index')
def login():
	request.args # GET形式传递的参数
	request.form # POST形式提交的参数

返回数据

@app.route('/index')
def login():
	return render_template('模板文件')
	return jsonify()
	reutrn redirect('/index/') # reutrn redirect(url_for('idx'))
	return "...."

wsgi 找源码的流程

from werkzeug.serving import run_simple 
from werkzeug.wrappers import BaseResponse
def func(environ, start_response):
    print('请求来了')    
    response = BaseResponse('Hello Word')    
    return response(environ, start_response)
if __name__ == '__main__':   
    run_simple('127.0.0.1', 5000, func)

wsgi静态文件的处理以及全局变量

from flask import Flask
app = Flask(__name__,template_folder="html_路径",static_folder="静态文件夹的名字",static_url_path="静态文件路径")
app.config.from_object('加载的配置文件_例子______config.settings')
@app.route('/index') def index():
    return 'hello world'
if __name__ == '__main__':
    app.run()
原文地址:https://www.cnblogs.com/SkyRabbit/p/11930044.html