Python从零开始编写轻量级Web框架(4):实现重定向功能

本文介绍了作者在阅读Flask源码后,如何在自己的Python Web框架中实现重定向功能。作者遵循Flask 0.1版本的思路,使用werkzeug库,并分享了遇到的问题及解决方案,包括函数返回完整响应对象导致的错误。同时,提供了框架的Github链接,邀请读者关注。
摘要由CSDN通过智能技术生成

重定向redirect

最近阅读了Flask的源码,弄懂了原理之后就想尝试来实现自己的一个Web框架。

因为大部分的实现思路都参照Flask0.1版本,也就是最初版本的思路。所用的基本库是werkzeug。

框架的完整代码都放在了Github上,之后会继续更新:https://github.com/jyz0309/WebFrame
求star,球球了T_T

完成了session功能后,接下来来继续完善框架, 这一次要完成的功能是重定向的功能,也就是redirect()函数。
要完成这一点,首先要明白的是Flask中的实现是怎么样的,结果我发现Flask中是直接调用底层库werkzeug中的redirect函数作为外部接口的- -。既然底层库中有直接接口,那为什么还要造多余的轮子呢?

from app import App,View,session
import json
from app import *

class Index(View):
    def GET(self,request,x):
        # session['hello'] = 2
        # return redirect(url_for())
        return 'helloer'
    def POST(self,request):
        print(json.dumps(request.form['color']))
        return json.dumps({
   '1':'hello'})

class Test(View):
    def GET(self,request):
        # print(session['hello1'])
        print(redirect('/R'))
        return redirect('/R')
    def POST(self,request):
        return json.dumps({
   '2':'hello'})

class R(View):
    def GET(self,request):
        return 'R'

urls = {
   '/<x>':Index,
        '/test':Test,
        '/R':R}

app = App()
app.secret_key = 'password'
app.add_url_rule(urls)
app.run()

这是我一开始的结果,其实也就是直接使用了redirect函数直接进行处理。
但是启动服务器后,这样会报错,Response对象不是可迭代对象的错误,在找了很久之后才发现问题所在…
首先来看一下函数的源码:

def redirect(location, code=302, Response=None):
    if Response is None:
        from .wrappers import Response

    display_location = escape(location)
    if isinstance(location, text_type):
        # Safe conversion is necessary here as we might redirect
        # to a broken URI scheme (for instance itms-services).
        from .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值