【问题标题】:How can I create random urls in gae?如何在 gae 中创建随机网址?
【发布时间】:2015-02-05 10:18:54
【问题描述】:

我想创建随机网址。我的意思是,让第一个网址是 myapp.appspot.com/868DF7.html 它将连接到 app.yaml 中的 test.py。当用户打开这个 url 时,test.py 会生成新的 url。我将在数据存储区保存下一个 url。并且以前的 url 将无法访问。我猜这个词是“一次性的”。

这样可以创建动态网址吗?

我当前的 test.py :它从数据存储区获取上一个字符串并创建下一个 url 并保存它。

    import webapp2
    from google.appengine.ext import db
    from google.appengine.api import users

    import jinja2
    import os
    import uuid

    class Saved(db.Model):
        urls=db.StringProperty()
        date = db.DateTimeProperty(auto_now_add=True)

    def _rKey(r_name=None):
        return db.Key.from_path("r", r_name or 'default_r')
    class MainPage(webapp2.RequestHandler):
        def get(self):
            r_name="none"
            saveds_query = Saved.all().ancestor(
                _rKey(r_name)).order('-date')
            urls = saveds_query.fetch(10)
            q=db.Query(Saved).order('-date')
            print "previous url:", q[0].urls
            print "<br>"


            save = Saved(parent=_rKey(r_name))


            save.urls=str(uuid.uuid4().get_hex().upper()[0:6])+".html"
            print "next url:",save.urls
            save.put()    

     APP = webapp2.WSGIApplication([
        ('/give/', MainPage),    
     ], debug=True)

和 app.yaml

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /.*
  script: helloworld.APP

libraries:
- name: webapp2
  version: "2.5.2"
- name: jinja2
  version: "2.6"

其余文件与谷歌的留言簿示例几乎相同。 https://github.com/GoogleCloudPlatform/appengine-guestbook-python/blob/master/guestbook.py

【问题讨论】:

  • 是的,这是可能的。您在哪里发现问题?
  • @AndreiVolgin 我猜 app.yaml 应该动态更新,但我不知道该怎么做

标签: python html google-app-engine


【解决方案1】:

app.yaml 列出了服务器用来匹配处理程序的“规则”。这些规则可以使用通配符和正则表达式。例如,您可以添加以下规则:

- url: /movie/.*

服务器会解释此规则以将所有匹配的 URL 发送到您指定的文件或脚本。例如,以下 URL 将匹配此规则:

myApp.appspot.com/movie/1234
myApp.appspot.com/movie/1234.mp4

您可以根据需要在匹配规则中使用正则表达式。

【讨论】:

  • 是否可以从数据存储区读取这个 - url :如果不是,我想我无法实现我的目标,因为我只想访问一个网址,我的意思是当您可以访问 myApp.appspot.com/movie/1234 时,第二个 myApp.appspot.com/movie/1234.mp4无法访问。一次一个。
  • 您无需触摸 app.yaml 即可实现这一目标。调用您的处理程序,检查代码/url 是否有效,如果是则显示内容,如果不是则重定向/响应错误代码。这就是所有网站的运作方式。
  • 非常感谢。我将使用 self.request.path 获取访问的 url,但无法让 webapp2.RequestHandler 在我的问题上与 test.py 一起工作。你有机会检查这个 test.py 吗?
  • 如果您有问题,可以在新问题中发布您的代码。
  • 每一个问题对我来说都有被禁止的风险 :) 我的猜测是它不起作用,因为我们不能多次定义 webapp2.WSGIApplication。 (helloword.py 和 test.py)所以我需要向 helloword.py 添加路由。再次感谢
【解决方案2】:

您应该定义一个在通配符或正则表达式上有效的处理程序,以匹配您为随机字符串选择的格式。

当您在那里收到请求时,让处理程序检查所使用的特定路由,并针对(如您正确指出的)存储资源或引用的 Datastore、Cloud SQL、您自己的 Redis 服务器等进行验证到应该可以从该特殊路径访问的资源。

然后,您可以让处理程序为资源提供服务,或者此时,如果您想要/需要,以某种方式验证身份验证(希望是他们的 google 帐户的 OAuth)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多