栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

flask基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

flask基础

Flask笔记1
前言:

视频资料:b站路飞IT学城的Flask教程

内容回顾: 1.为什么要使用装饰器?写一个装饰器

答:在不改变原函数的基础上,对函数执行前后进行定义操作

import functools
# 装饰器
def wapper(func):
	@functools.wrap(func)
	def inner(*args,**kwargs):
		return func(*args,**kwargs)
	return inner
"""
1.执行wapper函数,并将被装饰的函数当作参数。wapper(index)
2.将第一步的返回值,重新赋值给 新index=wapper(老index)
"""
# 验证
@wapper
def index(a1):
	return a1+1000
v=index(999)
print(v)
print(index.__name__)#执行index函数的函数名
“”“
输出:
1999
inner
”“”
2.简单的flask

简单的flask例子

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
    
if __name__ == '__main__':
    app.run()
1.配置文件

常用:‘DEBUG’,‘SECRET_KEY’

1.1方式一:
app.config['DEBUG'] = True
1.2方式二:

新建settings.py:

class Config(object):
	DEBUG = False
	TESTING = False
	DATABASE_URI = 'sqlite://:memory:'
class ProductionConfig(Config):
	DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config):
	DEBUG = True
class TestingConfig(Config):
	TESTING = True

在app.py中:

app.config.from_object('.settings.TestingConfig')
2.路由 2.1 添加路由的方式+endpoint(默认函数名)+传参数
# 路由方式一
#或:@app.route('/index/')
@app.route('/index/',methods=['GET','POST'],endpoint='n1')
def index(post_id):
	v1=url_for('n1')
	print(v1)
	print(url_for('n1',nid=888))
	print(type(post_id))
	"""
	输出:
	/index
	/index/888
	
	"""
	return "Index"
2.2 @app.route参数:
参数名含义
ruleURL规则(网页地址)
view_func视图函数名称
defaults=None默认值,当URL中无参数,函数需要参数时,使用defaults={‘k’:‘v’}为函数提供参数
endpoint=None名称,用于反向生成URL,即: url_for(‘名称’)
methods=None允许的请求方式,如:[“GET”,“POST”]
strict_slashes=None对URL最后的 / 符号是否严格要求
redirect_to=None重定向到指定地址
subdomain=None子域名访问
3.视图函数 4.请求和响应
# 请求相关信息
        # request.method
        # request.args
        # request.form
        # request.cookies
        # request.headers
        # request.path
        # request.files
        # obj = request.files['the_file_name']
        # obj.save('/var/www/uploads/' + secure_filename(f.filename))
        
        # request.values
        # request.full_path
        # request.script_root
        # request.url
        # request.base_url
        # request.url_root
        # request.host_url
        # request.host
        

        # 响应相关信息
        # return json.dumps({})   return jsonify({})
        # return "字符串"
        # return render_template('html模板路径',**{})
        # return redirect('/index.html')
        # response = make_response(render_template('index.html'))
        # response是flask.wrappers.Response类型
        # response.delete_cookie('key')
        # response.set_cookie('key', 'value')
        # response.headers['X-Something'] = 'A value'
        # return response
5.模板 5.1 Jinjia

s1.py:

def gen_input(value):
	return "" %value
	#或 return Markup("" %value)
@app.route('/x1',methods=['GET','POST'])
def index():
	context={
		'k1':123,
		'k2':[11,22,33],
		'k3':{'name':'oldboy','age':},
		'k4':lambda x:x+1
		'k5':gen_input
}

index.html:


{{k1}}

{{k2.0}} {{k2[0]}}

{{ka.name}} {{k3['name']}} {{k3.get('name',888)}}

{{k4(66)}}

{{k5(99)|safe}}

{k5(99)}} -->
5.2 @app.template_global()
@app.template_global()
def sb(a1,a2):
	return a1+a2

{{sb(1,2)}}

5.3 模板继承
{% extends 'layout.html'%}
{% block content %}

Content

{% endblock %}
6.session

app.secret_key=‘adsadasd12’
session是一个字典

session源码:

7.闪现
from flask import flash,get_flashed_message
@app.route('/x1',methods=['GET','POST'])
def login():
	flash('sss',category='x1')
	flash('qqq',category='x2')
	return "视图函数1"

@app.route('/x2',methods=['GET','POST'])
def index():
	data=get_flash_messages(category_filter=['x1'])
	print(data)
	return "视图函数2"
8.蓝图 blueprint 8.1蓝图的作用

1.目录结构划分
2.url的划分
3.某类url的@before_request

8.2蓝图例:

文件目录:

|---s8pro(project)
	|---s8pro(package)
		|---static
		|---templates
		|---views
			|---__init__.py
			|---admin.py
	|---manage.py

admin.py:

from flask import Blueprint
ad=Blueprint('ad',__name__,url_prefix='/admin')

@ad.before_request
def bf():
	print('before_request')
@ad.route('/home')
def home():
	return 'home'

init.py:

from flask import Flask
app=Flask(__name__)

from .view import admin

app.register_blueprint(admin.ad)

manage.py:

from s8pro import app
if __name__='__main__':
	app.run()
9.常见装饰器 9.1 @app.before_request @app.after_request
@app.before_request
def x1()
	print('前1')
@app.before_request
def x2()
	print('前2')
@app.after_request
def q1(response)
	print('后1')
	return response
@app.after_request
def q2(response)
	print('后2')
	return response
'''
输出:
前1
前2
后2
后1
'''
9.2 @app.before_request做登录验证
@app.before_request
def check_login():
	if request.path=='/login':
		return None
	user=session.get('user_info')
	if not user:
		return redirect('/login')
9.3 @app.before_first_request
@app.before_first_request
def before_first_request1():
    print('before_first_request1')
9.4 @app.errorhandler(404)
@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404
10.中间件
class Middleware(object):
	def __init__(self,old_wsgi_app):
		self.old_wsgi_app=old_wsgi_app
	def __call__(sefl,environ,start_response):
	"""
	每次有用户请求到来时
	"""
	print('before')
	obj=self.old_wsgi_app(environ,start_response)
	print('after')
	return obj
if __name__=='__main__':
	app.wsgi_app=Middleware(app.wsgi_app)
	app.run()
	"""
	1.执行app.__call__
	2.再调用app.wsgi_app方法
	"""
11.补充 11.1 项目依赖: pip install pipreqs
  • 生成依赖文件:pipreqs ./ --encoding=utf-8
  • 安装依赖文件:pip install -r requirements.txt
11.2 方法和函数
from types import MethodType, FunctionType


class Foo(object):
    def fetch(self):
        pass


print(isinstance(Foo.fetch, MethodType))
print(isinstance(Foo.fetch, FunctionType))  # True

obj = Foo()
print(isinstance(obj.fetch, MethodType))
print(isinstance(obj.fetch, FunctionType))  # True
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号