如何根据处理程序本身的URL获取处理程序类?

时间:2013-04-02 02:07:08

标签: python webapp2

我想了很长时间甚至问这个问题。如果标题不够明确,请原谅我。

所以我有单页面应用程序,其中所有路由都在JavaScript(AngularJS)中完成。从服务器我只返回部分HTML。现在,我想确保Google可以使用_escaped_fragment_索引我的应用程序。例如,在我的应用程序中,我有一个URL:

http://example.com/user/profile/a

这将成为:

http://example.com/?_escaped_fragment_=user/profile/a

Google正在为我编制索引。这意味着所有请求都将通过我的IndexHandler来决定如何处理它。

在IndexHandler里面我想以某种方式得到没有'/ user / profile / a'的类,所以我可以在它上面调用特殊的方法来返回页面的完整HTML(非部分)。

伪代码看起来像是谎言:

 class IndexHandler(webapp2.RequestHandler):

    def get(self):

        # In my example this would return 'user/profile/a'
        fragment = self.request.GET.get('_escaped_fragment_', '')

        if fragment:
            fragment = '/' + fragment

            # This is something I have no idea how to do
            clas_Im_looking_for = XXXX(fragment).get_handler()

            response = webapp2.Response()
            handler = clas_Im_looking_for(request, response)

            # Fragment get is my method
            response = handler.fragment_get()

谢谢!

1 个答案:

答案 0 :(得分:0)

我不是SEO专家,但我建议使用301重定向将接收请求重定向到“友好URL”。通过这种方式,您可以确保将好的网址编入索引,因此任何找到您网站的人都会使用网址来点击您的应用。

您应该确保这些网址对用户有意义回应......

这也解决了分配正确的处理程序来处理URL的问题。 Yous应用程序知道如何做到这一点。由于您现在处于应用程序的特定处理程序中,因此您实际上可以深入了解路由。

可能有一种方法可以在处理程序代码中使用self.app来引用顶级应用程序对象,或者使用类似webapp2.get_app()的内容来获取应用程序对象,然后使用路由器来获取匹配项正确的处理程序(记录为here

然而,重定向解决方案更优雅:

class IndexHandler(webapp2.RequestHandler):

    def get(self):

        # In my example this would return 'user/profile/a'
        fragment = self.request.GET.get('_escaped_fragment_', '')

        if fragment:
            fragment = '/' + fragment
            self.redirect(fragment, permanent=True)