目录
- Flask四剑客
- 配置文件的方式
- 第一种方式
- 第二种方式
- 第三种方式
- 第四种方式
- 其他方式
Flask四剑客
在Django中后端返回响应有几种形式:render(前端渲染页面)、redirect(重定向跳转)、HttpResponse(直接返回)、JsonResponse(实际内部继承了HttpResponse,返回json字符串)。
在Flask中也有相对的返回机制:
- render:前端渲染页面
- redirect_:重定向跳转
- jsonify:返回json字符串
- return 'xx':相当于HttpResponse
from flask import Flask, render_template, redirect, jsonify
app = Flask(__name__)
@app.route('/login')
def login():
return render_template('login.html') # 渲染login.html页面
@app.route('/index')
def index():
return redirect('/login') # 重定向跳转至'/login',显示login.html页面
@app.route('/test')
def test():
data = {'name': 'Bob', 'age': 18}
return jsonify(data) # 页面响应结果:{"age":18,"name":"Bob"}
@app.route('/test1')
def test1():
return 'ok' # 页面响应结果:ok。需要注意的是:return返回时不能返回数字类型,The return type must be a string, dict, tuple, Response instance, or WSGI callable
if __name__ == '__main__':
app.run()
from flask import Flask, render_template, redirect, jsonify
app = Flask(__name__)
@app.route('/login')
def login():
return render_template('login.html') # 渲染login.html页面
@app.route('/index')
def index():
return redirect('/login') # 重定向跳转至'/login',显示login.html页面
@app.route('/test')
def test():
data = {'name': 'Bob', 'age': 18}
return jsonify(data) # 页面响应结果:{"age":18,"name":"Bob"}
@app.route('/test1')
def test1():
return 'ok' # 页面响应结果:ok。需要注意的是:return返回时不能返回数字类型,The return type must be a string, dict, tuple, Response instance, or WSGI callable
if __name__ == '__main__':
app.run()
login.html 页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="登录">{{error}}
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="登录">{{error}}
</form>
</body>
</html>
注意:在django中html模板页面都是放在templates文件夹下,在flask中也需要新建一个templates文件夹,统一将html页面放在templates文件夹下
# 在Flask源码中,实例化__init__()方法中就已经定义了参数
def __init__(
self,
import_name,
static_url_path=None,
static_folder="static", # 放置静态文件的文件夹名,同django中的static
static_host=None,
host_matching=False,
subdomain_matching=False,
template_folder="templates", # 放置html页面的文件夹名,同django中的templates
instance_path=None,
instance_relative_config=False,
root_path=None,
):
'''
:param template_folder: the folder that contains the templates that should be used by the application. Defaults to ``'templates'`` folder in the root path of the application.
'''
# 在Flask源码中,实例化__init__()方法中就已经定义了参数
def __init__(
self,
import_name,
static_url_path=None,
static_folder="static", # 放置静态文件的文件夹名,同django中的static
static_host=None,
host_matching=False,
subdomain_matching=False,
template_folder="templates", # 放置html页面的文件夹名,同django中的templates
instance_path=None,
instance_relative_config=False,
root_path=None,
):
'''
:param template_folder: the folder that contains the templates that should be used by the application. Defaults to ``'templates'`` folder in the root path of the application.
'''
配置文件的方式
flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
{
'DEBUG': get_debug_flag(default=False), 是否开启Debug模式
'TESTING': False, 是否开启测试模式
'PROPAGATE_EXCEPTIONS': None,
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'SECRET_KEY': None,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
'USE_X_SENDFILE': False,
'LOGGER_NAME': None,
'LOGGER_HANDLER_POLICY': 'always',
'SERVER_NAME': None,
'APPLICATION_ROOT': None,
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'MAX_CONTENT_LENGTH': None,
'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None,
}
{
'DEBUG': get_debug_flag(default=False), 是否开启Debug模式
'TESTING': False, 是否开启测试模式
'PROPAGATE_EXCEPTIONS': None,
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'SECRET_KEY': None,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
'USE_X_SENDFILE': False,
'LOGGER_NAME': None,
'LOGGER_HANDLER_POLICY': 'always',
'SERVER_NAME': None,
'APPLICATION_ROOT': None,
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'MAX_CONTENT_LENGTH': None,
'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None,
}
第一种方式
from flask import Flask
app = Flask(__name__)
app.debug = True
@app.route('/')
def index():
return 'ok3'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
app.debug = True
@app.route('/')
def index():
return 'ok3'
if __name__ == '__main__':
app.run()
直接在文件中用 app.debug = True
设置开启DEBUG模式。开启后项目会自动重启。这种方式只能配置 debug 和 secret_key
第二种方式
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True # 通过config配置
@app.route('/')
def index():
return 'ok3'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True # 通过config配置
@app.route('/')
def index():
return 'ok3'
if __name__ == '__main__':
app.run()
第三种方式
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('settings.py') # 将配置写在配置文件中
@app.route('/')
def index():
return 'ok3'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('settings.py') # 将配置写在配置文件中
@app.route('/')
def index():
return 'ok3'
if __name__ == '__main__':
app.run()
settings.py文件
DEBUG = True
DEBUG = True
第四种方式
from flask import Flask
app = Flask(__name__)
app.config.from_object('settings.TestConfig') # 将配置写在配置文件的类中,导入使用
@app.route('/')
def index():
return 'oD3'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
app.config.from_object('settings.TestConfig') # 将配置写在配置文件的类中,导入使用
@app.route('/')
def index():
return 'oD3'
if __name__ == '__main__':
app.run()
settings.py文件
class BaseConfig:
SESSION_COOKIE_NAME = 'session'
class TestConfig(BaseConfig):
DEBUG = True
class WorkConfig(BaseConfig):
DEBUG = False
class BaseConfig:
SESSION_COOKIE_NAME = 'session'
class TestConfig(BaseConfig):
DEBUG = True
class WorkConfig(BaseConfig):
DEBUG = False
这种配置比较推荐使用,因为以后在开发过程中需要不同环境下配置不同,可以通过引用不同的类来配置不同的参数
其他方式
# 通过环境变量配置
app.config.from_envvar("环境变量名称")
# app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
环境变量的值为python文件名称名称,内部调用from_pyfile方法
app.config.from_json("json文件名称")
JSON文件名称,必须是json格式,因为内部会执行json.loads
app.config.from_mapping({'DEBUG': True})
字典格式
# 通过环境变量配置
app.config.from_envvar("环境变量名称")
# app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
环境变量的值为python文件名称名称,内部调用from_pyfile方法
app.config.from_json("json文件名称")
JSON文件名称,必须是json格式,因为内部会执行json.loads
app.config.from_mapping({'DEBUG': True})
字典格式