flask基础-请求响应(current_app,redirect,abort,ip 拦截,获取IP,url_map)

- 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()

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值