小编Mar*_*nch的帖子

如何使用WSGI将用户从http重新路由到https

原始问题


App Engine SDK 1.6.5
Python 2.7
webapp2

我已经实现了webapp2方案来保护页面到https.问题是,当用户说http:// site/login而不是https:// site/login时,由于方案无法识别路由,因此会出现404错误.

示例main.py

#  Libraries
import webapp2

#  Local Controllers
from controllers.HomeHandler import HomeHandler
from controllers.LoginHandler import LoginHandler

app = webapp2.WSGIApplication([
    webapp2.Route(r'/', HomeHandler),
    webapp2.Route(r'/login', LoginHandler, schemes=['https'], name='login')
], debug=True)
Run Code Online (Sandbox Code Playgroud)

我在https路由下面添加了另一个路由/控制器来捕获http请求:
webapp2.Route(r'/login', RouteLogin)

RouteLogin.py

#  Libraries
import webapp2

class RouteLogin(webapp2.RequestHandler):
    def get(self):
        self.redirect('https://site.appspot.com/login')
Run Code Online (Sandbox Code Playgroud)

这有效,但似乎应该有更好的方法来做到这一点.就像在Apache Web服务器上使用htaccess一样.这对我喜欢的黑客来说太像了.我真的不喜欢我的代码中的硬编码URL.更不用说登录的2个请求并不是什么大不了的事,但可能还有其他一些例子,它最终导致成本太高.

注意1:如果您正在查看此解决方案,请注意使用HTTPS方案还意味着您将无法在不删除SCHEME或配置为dev设置的变量的情况下使用开发控制台.

注意2:我能够以编程方式提供HTTPS而不是HTTP.我在正确的轨道上有下面的评论,但它需要一个参数.

webapp2.uri_for('login', _scheme='https')
这将为您提供正确的https://someapp.appspot.com/login网址.遗憾的是,我没有处理我的主要问题,如何处理人们在没有https的情况下在地址栏中键入url并收到错误,除非我使用上面的hack.所以我仍然在寻找WSGI方式将收入请求路由到HTPPS.

编辑:添加了注释1并澄清了标题,我认为很明显我是从源代码而不是CGI使用WSGI.

python ssl https google-app-engine webapp2

7
推荐指数
2
解决办法
2257
查看次数

如何使用Google App Engine Python将变量从app.yaml传递到main.py.

我试图从app.yaml传递一些配置变量到我的main.py. 我无法找到从代码中访问app.yaml的语法.

例如,您希望用户将其客户端号码放在app.yaml中,并从main.py访问它以传递到main.html.虽然在main.py中创建一个变量来传递它很容易,但它似乎更适合放入app.yaml.

例:

的app.yaml

    application: xyz
    version: 1
    runtime: python27
    ...
    clientID: (ID here)
Run Code Online (Sandbox Code Playgroud)

main.py

    myID = appYAML.clientID
    ...
    values = {'xyz': blah.blah, 'myID': myID }
Run Code Online (Sandbox Code Playgroud)

main.html中

    ...
    <script>
      ...
      {% ifequal myID %}
        my_client = {{myID}}
      ...
    </script>
Run Code Online (Sandbox Code Playgroud)

python google-app-engine

4
推荐指数
2
解决办法
2293
查看次数

Python 2.7 / App Engine - TypeError: is_valid() takes exactly 2 arguments (3 given)

The following code is close to what I am using without getting too long. I get the error TypeError: is_valid() takes exactly 2 arguments (3 given). To my eyes I am only passing 2 arguments. So where is the third argument coming from?

models/MyModel.py

from google.appengine.ext import db

class MyModel(db.model):
    a = db.StringProperty(required=True)
    b = db.StringProperty(required=True)
    c = db.StringProperty(required=True)

class Update:
    def is_valid(x, y)
        myquery = db.GqlQuery('SELECT * FROM Valid WHERE value = :1' x)
        v = myquery.get()

        if …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine typeerror python-2.7

2
推荐指数
2
解决办法
2169
查看次数

标签 统计

google-app-engine ×3

python ×3

https ×1

python-2.7 ×1

ssl ×1

typeerror ×1

webapp2 ×1