首页 技术 正文
技术 2022年11月15日
0 收藏 310 点赞 4,159 浏览 3782 个字

一.装饰器的坑

在使用装饰器函数时候,当一个装饰器装饰多个函数的时候,会由于内存地址相同时发生报错,因为装饰的都是一个函数

所以就需要引入

import functools  重新定义每一个函数的名称

import functools
def waidu(fun):
@functools.wraps(fun)
def nei(*args,**kwargs):
if session.get('user'):
ret= fun(*args, **kwargs)
return ret
else:
return redirect('/login')
return nei

或者

在flask下也有一个内置 endpoint

二 flask中的路由

1.endpoint 反向生成url地址标识,默认是凸函数名url_for

 @app.route('/', endpoint='index')#endpoint是route里面的属性,默认为NONE,则会显示函数名def index为默认
#要是标识出,就会区分每一个单独的函数名
def index():
print(request.path)
return render_template('home.html')

这样也可以区分装饰器的坑,通过引入

from flask import url_for
来检测
print (url_for()
若正确,则打印路由地址

2.methods 视图函数允许的请求方式

@app.route("/index/<page>",methods=["GET","POST"],endpoint="index")

methods默认get请求,若不声明则不会显示

3.”/index/<page>” 动态路由路由参数

@app.route("/info/<page>", methods=['POST','GET'],endpoint='student',strict_slashes=True)
#<int:page>page是一个变量名,int声明是数字,默认声明str
#访问时,需要后面带着访问的字符串才会有页面
def student(page):
print(page,type(page))
return ""

4.defaults={“nid”:”123456″} 默认参数,同样拼接在route里,打印的page是默认参数123456

5.strict_slashes=True 是否严格遵循路由地址#按照严格的网址关系,默认为false

6.redirect_to=”/login” 永久重定向 301 没有302发生在显示页面之前,用在更换网址时直接跳转旧的网址

三.flask实例化配置

1.template_folder=”temp” 默认模板路径 templates   #在更改template时使用,直接指向更改后的名字,

2.static_folder=”static”, 默认静态文件路径 static  #在更改静态文件后使用,直接指向更改后静态文件夹的名字

3.static_url_path=”/static” 访问静态文件路由地址 默认是”/”+static_folder  #再更改静态文件后,需要在前端更改静态文件的路径,使用时直接写更改后的静态文件路径/static

app = Flask(__name__,template_folder="template",static_folder="statics",static_url_path="/statics")

了解:

.static_host=None 指定静态文件服务器地址
.host_matching = False, # 如果不是特别需要的话,慎用,否则所有的route 都需要host=""的参数
.subdomain_matching = False, # 理论上来说是用来限制SERVER_NAME子域名的,但是目前还没有感觉出来区别在哪里
.instance_path = None, # 指向另一个Flask实例的路径
.instance_relative_config = False # 是否加载另一个实例的配置
.root_path = None # 主模块所在的目录的绝对路径,默认项目目录

四flask对象配置

'DEBUG': False,  # 是否开启Debug模式
'TESTING': False, # 是否开启测试模式
'SECRET_KEY': None # 在启用Flask内置Session的时候/开启flash,一定要有它
'PERMANENT_SESSION_LIFETIME': , # days , Session的生命周期(天)默认31天
'SESSION_COOKIE_NAME': 'session', # 在cookies中存放session加密字符串的名字

对象配置需要新创建一个文件,

class FlaskDebug(object):
DEBUG=True
SECRET_KEY="SADIHAS"
PERMANENT_SESSION_LIFETIME=
SESSION_COOKIE_NAME="shadoubushi"

在flask里

import FlaskSetting
app.config.from_object(FlaskSetting.FlaskDebug)

就可以使用配置后的环境了

五.flask蓝图 (蓝图配置)

Blueprint :当成一个不能被启动的 app Flask示例

使用:

创建一个独立的文件夹

flask 基础2

from flask import Blueprint,render_template
s4app = Blueprint("s4app",__name__,template_folder="apptemp",url_prefix="/blue")
@s4app.route("/s4app")
def s4appfunc():
return render_template("s4app.html")

url_prefix=”/blue” url前缀

在访问时需要写在路由前127.0.0.1:8000/blue/s4app

注册:

app.register_blueprint(views.s4app)

例子:

from flask import Blueprint, render_template,request,jsonify,jsonapp01=Blueprint("app01",__name__,template_folder="temp")#每一个蓝图都需要声明一个名字,不可重复,可以创建多个蓝图
@app01.route("/app01",methods=["POST","GET"])
def app01func():
if request.method =="GET":
return render_template("01.html")
else:
print(request.form.to_dict())
dic={}
x=request.form.get("key")
y=request.form.get("value")
dic[x]=y
dicc=json.dumps(dic)
print(dic) return render_template("01.html",dic=dicc)

flask

from flask import Flask
from bu import haapp=Flask(__name__)
app.register_blueprint(ha.app01)app.run()

六.flask特殊装饰器

@app.before_request # 请求进入视图函数之前

@app.before_request
def bel():
print("我是 before_request1")
return None
#默认return None 要是直接返回 三剑客 不会自行视图函数
@app.before_request
def be2():
print("我是before_request2")
@app.before_request
def be3():
print("我是before_request3")

@app.after_request # 响应返回客户端之前

@app.after_request
def af1(args):
print(args)
print("我是after_request1")
return args
#发生在返回给客户端之前,需要返回参数args,若没有客户端什么都不显示
@app.after_request
def af2(args):
print("我是after_request2")
return args@app.after_request
def af3(args):
print("我是after_request3")
return args

正常情况下流程:be1 – be2 – be3 – af3 – af2 – af1

异常情况下流程:be1 – af3 – af2 – af1

@app.errorhandler(404) # 重定义错误页面返回信息

def error404(error_info):

return三剑客+小儿子

@app.errorhandler(404)#声明出错信息 必须写
def error404(args):
print(args)#打印报错信息
return render_template("error.html")#返回自己写的报错信息app.run(debug=True)
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,498
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,135
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,300