- render_template找到模板文件,渲染到浏览器中
- render_template_string 他是直接把html的字符串渲染过去(简单的说,就是代码本身)
- 看到的html网页源代码就是这个


- docs.jinkan.org/docs/jinja2/extensions.html
- HTML注释,通过查看源代码可以看到,模板注释,查看源代码看不到


- 空白,传输的时候会占带宽
# 1.从flask包/模块 中引入flask类
from flask import Flask,current_app,g,request,session,make_response
from flask import render_template,redirect,abort
app = Flask(__name__)
app.debug = True
# current_app当前应用的实例
# g 处理请求时的临时存储对象,每次请求都会重设这个变量
@app.route('/index')
def index():
print('app:',app)
print('current_app',current_app) # current_app当前应用的实例
print(app == current_app) # True 只是值相等,因为我们目前只有一个app启动,没有多个
print(app is current_app) # False 引用是不一样的
return 'index'
@app.route('/')
def helloworld():
# 视图函数
# return 'hello world,susede'
# 访问'/'时,重定向到'/test'页面
# return redirect('/test')
# abort(403) # 触发一个异常,不需要return,会调用后续的forbidden函数
# ip 拦截
ip_list = ['127.0.0.2']
ip = request.remote_addr
if ip in ip_list:
abort(403) # 会调用后续的forbidden函数
return 'hello,sucess,welcome'
# 路由配置使用装饰器 @app.route(url,methods)
@app.route('/test')
def hellotest():
# 视图函数
return 'hello world,test0222,测试函数'
# URL获取视图中的参数page
@app.route('/user/')
@app.route('/user/<page>')
def list_user(page=1):
return '你好,我是第{}页用户'.format(page)
# 使用API配置 app.add_url_rule(url,url_name,view_name)
app.add_url_rule('/test-apimethod','apimethod',hellotest)
# 查看url路由规则
print(app.url_map)
@app.route('/test/req')
def test_request():
'''请求报文练习'''
get_args = request.args
print('get_args',get_args)# get请求参数获取
print(get_args.get('page',1)) # 请求中没有传入page值,那么可以设置默认值
print(request.args.get('name'))
# 获取服务器所在的主机IP地址
headers = request.headers
print(headers)
print('host',headers.get('host'))
# 获取请求用户的ip地址
user_ip = request.remote_addr
print('user_ip',user_ip)
print(request.remote_user)
# 获取user-agent,可以用于爬虫
user_agent = request.headers.get('user-agent',None)
print('User-Agent:','\n',user_agent)
return 'request success'
@app.before_first_request
def first_request():
"""服务器启动后第一个请求到达前"""
print('服务器启动后第一个请求到达前,first_request')
@app.before_request
def per_request():
"""每一个请求到达前"""
print('每一个请求到达前,per_request')
# @app.after_request
# def after_request(reponse):
# """请求结束后执行,过程中产生异常则不执行"""
# print('请求结束后执行,过程中产生异常则不执行,after_request')
# print(reponse.get_json())
# return 'after_request'
@app.route('/test/resp')
def test_response():
"""测试响应"""
return '响应测试,reponse success',405,{
'user_name':'mark','user_id':'mark_id2'}
@app.route('/test/mkresp')
def test_mkresponse():
'''使用make_response构造响应对象'''
mkresp = make_response('这是一个响应对象',403,{
'token':'abc123'
})
mkresp.headers['user_name'] = 'nick_li'
mkresp.status_code = 200
return mkresp
@app.route('/test/htmlresp')
def test_html_response():
'''响应html'''
html = '<html><body><h1 style="color:red">这是一个HTML响应测试</h1></body></html>'
resp = make_response(html)
return resp
@app.route('/test/html')
def test_html():
'''从文件读取html'''
html = render_template('test1.html')
resp = make_response(html,400) # 都可以参考前面的使用
return resp
@app.errorhandler(403)
def forbidden_page(err):
"""403错误提示:你没有权限访问页面"""
print(err)
return '你没有权限访问页面,请联系管理员开通权限'
# if __name__ == '__main__':
# app.run()
本文介绍了Flask框架中的基本请求响应处理,包括使用`render_template`加载并渲染模板文件到浏览器,以及`render_template_string`将HTML字符串直接渲染。同时,还提到了HTML注释、模板注释以及空白处理对带宽的影响。
1425

被折叠的 条评论
为什么被折叠?



