【问题标题】:appengine/Django submit form using classesappengine/Django 使用类提交表单
【发布时间】:2020-02-12 16:46:25
【问题描述】:

我想从官方文档 (https://cloud.google.com/appengine/docs/standard/python/getting-started/python-standard-env) 创建一个注册并尝试遵循。

现在,我想做的就是将表单数据显示到另一条路线,但我收到以下错误:

  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/vicktree/Desktop/noah/web/noahs-app/handlers/noah_handler.py", line 329, in dispatch
    super(NoahSiteHandler, self).dispatch()
  File "/home/vicktree/Desktop/noah/web/noahs-app/handlers/noah_handler.py", line 130, in dispatch
    webapp2.RequestHandler.dispatch(self)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/vicktree/Desktop/noah/web/noahs-app/handlers/site_handlers.py", line 1071, in post
    user_name = self.request.form['user_name']
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webob-1.1.1/webob/request.py", line 1238, in __getattr__
    raise AttributeError(attr)
AttributeError: form

我的路线如下:

   #Sign-in registration
    Route(r'/signin/registration', 'handlers.site_handlers.UserRegistration', name='registration'),

    #Sign-in Noah registration submit
    Route(r'/signin/submitted', 'handlers.site_handlers.UserRegistrationSubmit', name='registration_submit'),

我的课堂逻辑如下:

class UserRegistrationSubmit(SiteHandler):

    template_filename = 'registration_submit.html'

    def post(self):
        user_name = self.request.form['user_name']
        password = self.request.form['password']
        self.render_template(values={'user_name':user_name, 'password':password})

类用户注册(站点处理程序):

    # email = request.form['email']

    template_filename = 'registration.html'

    def get(self):
        self.render_template()

我的 HTML 模板如下:

   /registration.html
    <div class="alpha-content grid-line">
    <head>
        <title>Submit a form</title>
       <link rel="stylesheet" type="text/css" href="/static/style.css">
      </head>
      <body>
        <div id="container">
          <div class="pagetitle">
            <h1>Submit a form</h1>
          </div>
          <div id="main">
            <form method="post" action="{{ url_for('registration_submit') }}">
              <label for="user_name">Username:</label>
              <input type="text" name="name"><br />
              <label for="password">Password:</label>
              <input type="password" name="password"><br />
              <input type="submit">
            </form>
          </div>
        </div>


        <div class="veneer"></div>
    </div>

   /registration_submit.html
    <html>
     <head>
       <title>Submitted form</title>
     </head>
     <body>
       <div id="container">
         <div class="pagetitle">
           <h1>Form submitted</h1>
         </div>
         <div id="main">
           <p>Thanks for your submission!</p>
           <p>Here's a review of the information that you sent:</p>
           <p>
              <strong>Name</strong>: {{user_name}} <br>
              <strong>Password</strong>: {{password}} <br>
           </p>
         </div>
       </div>
     </body>
    </html>

【问题讨论】:

    标签: django google-app-engine flask google-cloud-platform


    【解决方案1】:

    我怀疑是因为您在表单中将name 属性定义为"name"

    <input type="text" name="name"><br />
    

    然后尝试在逻辑中以user_name 的身份访问它:

    user_name = self.request.form['user_name']
    

    您因此得到AttributeError

    这两者都需要匹配,因此为了清楚起见,您可以执行以下操作:

    <input type="text" name="user_name"><br />
    
    user_name = self.request.form['user_name']
    

    【讨论】:

    • 我仍然遇到同样的错误。你认为是 request 没有 form 属性的原因吗?
    • 是的,很有可能。这个问题提到了 django,但该教程适用于烧瓶;您使用的是哪个,SiteHandler 是什么?
    • @VickTree 您链接的教程也与 Python2.7 有关,现在不支持,因此您可能希望查看更现代的教程:Building a Python 3.7 App on App Engine
    • 谢谢,但这是我正在协助的一个老公民最科学的项目。我正在考虑迁移到 python 3。但现在,我需要添加一些功能。 siteHandler class siteHandler(webapp2.RequestHandler): 使用 webapp2.RequestHadlers 并允许我做一些事情,比如声明一个模板文件并渲染它等等。
    • 我已经弄明白了,感谢您的帮助;我使用的是 webapp2 而不是 flask/django。
    猜你喜欢
    • 2011-09-01
    • 2017-07-26
    • 2017-05-13
    • 2021-03-19
    • 2019-03-24
    • 2020-12-30
    • 2011-03-13
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多