python - 重定向到引用页面的最佳方式

标签 python google-app-engine redirect referrer

我有一个类似于我的 previous question 的问题.

在同一个应用程序中,我有一个 VoteHandler,当用户单击向上箭头然后重定向到同一页面时,它会添加 +1。

现在我将 url 参数添加到页面中,并且 url 如下所示

/dir?type=tshirt

我需要能够重定向到正确的页面。

如上所述here作者:Nick Johnson referrer 并不是一种好的重定向方式。

我希望获得有关如何修复 VoteHandler 以便其重定向到正确页面的帮助。

谢谢!

class VoteHandler(webapp.RequestHandler):
    def get(self, id):
        id = int(id)
        item = Item.get_by_id(id)

        user = users.get_current_user()

        if user:
            greeting = ("%s (<a href='%s'>sign out</a>)" %
                           (user.nickname(), users.create_logout_url(self.request.uri)))

            #--check if user voted on this item before--#
            query  = SiteUser.all()
            query.filter("liked_items =", (str(item.key().id())))
            already_voted = query.get()

            if already_voted:
                self.redirect("/onevote")
            else:
                query = SiteUser.all()          
                query.filter("site_user =", users.get_current_user())

                data = query.get()

                data.total_votes += 1
                data.liked_items = str(item.key().id())
                data.site_user = users.get_current_user()

                db.put(data)

                item.points += 1
                item.put()            

                if self.request.referrer == 'http://localhost:8083//newest':
                    self.redirect('/newest')
                elif self.request.referrer == 'http://localhost:8083/hot':
                    self.redirect('/hot')
                #How do I fix this line to get the correct url parameter?
                elif self.request.referrer == 'http://localhost:8083/dir?type=tshirt':
                    self.redirect('/dir/tshirt')    
                else:     
                    self.redirect("/")                       
        else:            
            greeting = ("<a href='%s'>Sign in with your Google account or register</a>." %
                           cgi.escape(users.create_login_url(self.request.uri)))

更新

answer by systempuntoout效果很好,但我必须将 Directory 中的投票链接从

更改为
/vote/%s

/vote/%s?type=%s

这样我就可以在VoteHandler中获取merchandise_type:

self.response.out.write("<ol>")
for item in items:
    self.response.out.write("""<li>
                                   <a href="/vote/%s?type=%s"> ^ </a><a href="%s">%s</a> <span id='Small'>(%s)</span><br /> 
                                   <div id='Small'> 
                                     %s points %s by %s <a href="/item/%s"></a> | 
                                     <a href="/item/%s#disqus_thread"></a>
                                   </div>
                               </li><br /> """ % 
                                    (str(item.key().id()), merchandise_type, item.url, item.title, urlparse(item.url).netloc,
                                    item.points, item.date.strftime("%B %d, %Y %I:%M%p"), item.user_who_liked_this_item, str(item.key().id()), str(item.key().id())))                               

self.response.out.write("</ol>")

最佳答案

我会以这种方式使用type参数:

class VoteHandler(webapp.RequestHandler):
    def get(self, id):
        id = int(id)
        item = Item.get_by_id(id)
        merchandise_type = self.request.get("type", "")
        ..
        self.redirect('/%s' % merchandise_type)

关于python - 重定向到引用页面的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775906/

相关文章:

python - 运行 for 循环获取图像时不显示图像

python - 如何在python 3中获取该站点中的json数据?

python - 在哪里定义Python类,mysql连接?

python - 为什么会失败? (谷歌应用程序引擎数据存储,Python)

google-app-engine - 将图像从 Google App Engine 中的本地驱动器存储到数据存储中

c# - 自定义错误页面中的 AspxErrorPath

python - SQLite - 查询返回相关记录

google-app-engine - GAE : What's faster loading an include config file from GCS or from cloud SQL

AngularJS 重定向到数据保存后查看

正则表达式检查 url 是否有尾部斜杠和参数