【问题标题】:How to pass user input from one class to another in python?如何在python中将用户输入从一个类传递到另一个类?
【发布时间】:2012-06-14 14:18:50
【问题描述】:

我是编程新手,所以很有可能我做错了,但这就是我想要做的。

我正在尝试编写一个程序,该程序具有一个表单,该表单在一个类中接受用户输入,然后将其传递给另一个类,但我不知道该怎么做。这是相关代码的 sn-p(我将 * 放在用户名变量周围,我试图传递的那个):

class MainHandler(webapp2.RequestHandler):
  #this is in a form
   def post(self):
    ***username*** = self.request.get('username')

  #if username and other info entered correctly, then it redirects user to a new page and the WelcomeHandler class, so how do I get the username into the "Welcome, " message below?:


class WelcomeHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("Welcome, " + ***username***)

编辑:这是我的整个代码,如果有帮助的话:

import webapp2
import re
import cgi

form="""

<form method = "post">   
Signup
<br>

<table>
    <tbody>            
      <tr><td><label>Username</label></td><td><input type="text" name = "username" 
 value="%(username)s"><div style="color: red">%(error)s</div> </td></tr>

<br>
     <tr><td> <label>Password</label></td><td><input type="password" name = "password" 
value="%(password)s"><div>TK TK TK</div></td></tr>

<br>
    <tr><td> <label> Verify password</label></td><td><input type="password" name = 
"verify" value="%(verify)s"><div> TK TK TK</div></td></tr>

<br>
    <tr><td> <label> Email(optional)</label></td><td><input type = "text" name = "email"
 value ="%(email)s"><div> TK TK TK</div></td></tr>

 </tbody>
</table>
<br>
<br>
<input type = "submit">
</form>
"""


def escape_html(s):
    return cgi.escape(s, quote = True)

def valid_username(username):
    USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$")
    return USER_RE.match(username)

def valid_password(password):
    USER_RE = re.compile(r"^.{3,20}$")
    return USER_RE.match(password)

def verify_password(password, verify):
    if verify == password:
        return True
    else:
        return False

def valid_email(email):
    USER_RE = re.compile(r"^[\S]+@[\S]+\.[\S]+$")
    return USER_RE.match(email)

class MainHandler(webapp2.RequestHandler):
    def write_form(self, error="", username="", password="", verify="", email=""):
        self.response.out.write(form % {'error': error, "username": 
escape_html(username), "password": escape_html(password), "verify": escape_html(verify),
 "email": escape_html(email)})

    def get(self):
        self.write_form()


    def post(self):
        username = self.request.get('username')
        password = self.request.get('password')
        verify = self.request.get('verify')
        email = self.request.get('email')

        username_check = valid_username(username)
        password_check = valid_password(password)
        verify_check = verify_password(password, verify)
        email_check = valid_email(email)

        if not (username_check and password_check and verify_check):
            self.write_form("That's not valid, you jive turkey", username, password, 
verify, email)
        else:
            self.redirect("/welcome")

class WelcomeHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("Welcome, " + username)


app = webapp2.WSGIApplication([
        ('/', MainHandler),
        ('/welcome', WelcomeHandler)], debug=True)

【问题讨论】:

    标签: python class variables webapp2


    【解决方案1】:

    你不想这样做。这不仅仅是普通的基于类的编程:这些类中的每一个都代表了从浏览器到服务器的请求。在类之间传递这些数据意味着什么?

    您真正想要做的是告诉浏览器重定向到您的 GET 处理程序。

    【讨论】:

    • 谢谢。我没有 GET 处理程序,但如何在不使用其他类的情况下将其重定向到 GET 处理程序?
    • 确实有一个 GET 处理程序。这就是你的WelcomeHandler
    • 哦。哦!在这种情况下,我的代码会重定向到我的 WelcomeHandler。但是 WelcomeHandler 似乎无权访问用户名变量。我以为这是因为它属于不同的班级,但也许这是错误的。
    【解决方案2】:

    尝试查看 webapp2 文档中的 setting cookiesreading cookies

    【讨论】:

      【解决方案3】:

      正如 Daniel 所说 - 您需要了解 HTTP 请求/响应周期以及您的 RequestHandler 实例 是如何与之关联的。

      这里通常的解决方案是使用“会话”——一种将数据从一个请求保存到另一个给定用户的机制,通常由存储为用户浏览器中的 cookie 的不透明密钥标识。 FWIW,任何体面的 Web 框架都应该为会话提供支持,因此您可能需要在此处阅读框架的文档。

      【讨论】:

        猜你喜欢
        • 2021-03-21
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 2013-03-16
        • 1970-01-01
        • 2012-01-01
        相关资源
        最近更新 更多