一:flask:初识

一、django和flask的区别?(面试题)

  1. django是个大而全的框架,flask是个轻量级的框架。
  2. django内部为我们提供了非常多的组件:orm / session / cookie / admin / form / modelsform / 视图 / 路由 / 模板 / 中间件 / 分页 / auth / content-type / 缓存 / 信号 / 多数据库连接 等。
  3. flask框架本身没有太多的功能:路由 / 视图 / 模板(jinja2) / session / 中间件 ,第三方组件非常齐全。
  4. django的请求处理是逐一封装传递的;flask的请求是利用上下文管理实现的。

二、flask的快速使用

1. 安装

pip install flask

在这里插入图片描述

1.1 依赖wsgi Werkzeug

安装flask,会安装依赖包Werkzeug。
flask基于werkzeug的wsgi实现,flask本身自己没有wsgi:

from werkzeug.serving import run_simple

def func(environ, start_response):
	print('请求来了')
	pass

if __name__ == '__main__':
	run_simple('127.0.0.1', 5000, func)

进一步

from werkzeug.serving import run_simple

class Flask(object):
	def __call__(self, environ, start_response):
		return 'xx'
app = Flask()
if __name__ == '__main__':
	run_simple('127.0.0.1', 5000, app)
"""
执行app,app()会调用__call__方法
"""

再进一步

from werkzeug.serving import run_simple

class Flask(object):
	def __call__(self, environ, start_response):
		return 'xx'
	def run(self):
		run_simple('127.0.0.1', 5000, self)
app = Flask()
if __name__ == '__main__':
	app.run()

2. flask快速开发

# 导入flask
from flask import Flask
# 创建flask对象
app = Flask(__name__)

@app.route('/index/')
def index():
	return 'hello world'

if __name__ == '__main__':
	app.run()

总结:

  • flask基于werkzeug的wsgi实现,flask本身自己没有wsgi;
  • 用户请求一旦到来,就会执行app.__call__方法

3. 简单登录案例

from flask import Flask, render_template, jsonify, request, redirect, url_for

app = Flask(__name__)


@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        # return '登录'   # HttpResponse
        return render_template('login.html')  # render
        # return jsonify({'code': 1000, 'data': [1, 2, 3]})  # JsonResponse
    username = request.form.get('username')
    pwd = request.form.get('pwd')
    if username == 'letme' and pwd == '123':
        # return redirect('/index/')
        return redirect(url_for('index'))  # 反向解析
    errormsg = '用户名或者密码错误!'
    # return render_template('login.html', **{'errormsg': errormsg})
    return render_template('login.html', errormsg=errormsg)


@app.route('/index/', endpoint='index')  # endpoint:反向解析
def index():
    return '首页'


if __name__ == '__main__':
    app.run()
由上简单总结flask知识点
"""
1. flask路由
	参数:
		url
		methods:允许访问的方法类型
		endpoint:用于反向解析,不写默认就是函数名,不能重名
"""
@app.route('/index/', methods=['GET', 'POST'] endpoint='lg') 
def login():
    pass
"""
2.支持动态路由
	
"""
@app.route('/index/') 
def index():
    pass
@app.route('/index/<name>') 
def index(name):
    pass
@app.route('/index/<int:pk>') 
def index(pk):
    pass
"""
3. 视图:获取提交的数据
	request.args : GET形式传递的参数
	request.form : POST形式传递的参数
"""
@app.route('/login/', methods=['GET', 'POST'])
def login():
    username = request.form.get('username')
    pwd = request.form.get('pwd')
"""
4. 返回数据
"""
@app.route('/login/', methods=['GET', 'POST'])
def login():
        return '登录'   # HttpResponse
        return render_template('login.html')  # render
        return jsonify({'code': 1000, 'data': [1, 2, 3]})  # JsonResponse
        # return redirect('/index/')
        return redirect(url_for('index'))  # 反向解析
"""
5. 模板处理
	{{ xxx }}
	{% for item in list %}
		{{ item }}
	{% endfor %}
"""

三、蓝图

功能:构建业务功能可拆分的目录结构。
在这里插入图片描述
__init__

from flask import Flask
from .views.users import user
from .views.carts import cart

def create_app():
    app = Flask(__name__)
    app.secret_key = 'dsdhsjfhnksjfnxjk'
   """ 将蓝图对象注册进来"""
    # app.register_blueprint(user)
    # app.register_blueprint(cart)
    # url_prefix='/user/':访问蓝图中的路由要带user,http://127.0.0.1:5000/user/f1
    app.register_blueprint(user, url_prefix='/user/')  
    app.register_blueprint(cart, url_prefix='/cart/')

    return app

启动文件:manage.py

from pro_flask import create_app

app = create_app()

if __name__ == '__main__':
    app.run()

面试题:django的app和flask的蓝图有什么区别?

相同点:①app和蓝图充当的功能是一样的,都是用于业务拆分 / ②都需要注册才能使用 / ③都可以在内部定义模板和静态文件。
不同点:①蓝图可大可小,小的可以只有视图函数,大的和app一样 / ②另外蓝图和app的注册方式不一样,app是在配置文件settings中注册,蓝图是通过app.register_blueprint()注册 / ③flask中before/after_request比django中间件粒度更细。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值