【问题标题】:Reading input from an HTML form in CherryPy在 CherryPy 中从 HTML 表单中读取输入
【发布时间】:2021-03-05 15:52:57
【问题描述】:

我希望将 HTML 表单中的值读入 CherryPy 端点:

class MyWebService(object):

    def generate_random_string(length = 6):
        letters = string.ascii_lowercase
        print("length: " + str(length))
        result_str = ''.join(random.sample(letters, k = length))
        print("Random String is:", result_str)
        return result_str

    @cherrypy.expose
    def index(self):
        return """<form method="POST" action="randomize">
          <input type="text" name="the_link" size="50"/>
          <button type="submit">Randomize!</button>
        </form>"""

    @cherrypy.expose
    def randomize(self, the_link):
        random_string = self.generate_random_string()
        log_statement = link + " converted to: " + random_string
        return log_statement

if __name__ == '__main__':
    config = {'server.socket_host': '0.0.0.0'}
    cherrypy.config.update(config)
    cherrypy.quickstart(MyWebService())
    cherrypy.quickstart(MyWebService(), '/', config)

当我运行代码并转到localhost:8080 并输入the_link 的值时,我看到了这个错误:

File "app.py", line 25, in generate_random_string
    result_str = ''.join(random.sample(letters, k = length))
  File "/opt/anaconda3/lib/python3.8/random.py", line 362, in sample
    if not 0 <= k <= n:
TypeError: '<=' not supported between instances of 'int' and 'MyWebService'File "app.py", line 25, in generate_random_string
    result_str = ''.join(random.sample(letters, k = length))
  File "/opt/anaconda3/lib/python3.8/random.py", line 362, in sample
    if not 0 <= k <= n:
TypeError: '<=' not supported between instances of 'int' and 'MyWebService'

我不明白为什么n 的类型是MyWebService。你能指出为什么吗? generate_random_string() 函数在此源文件之外按预期工作。

【问题讨论】:

  • 首先给generate_random_string一个“自我”论点。

标签: python html rest cherrypy


【解决方案1】:

您应该使用此代码从表单中获取信息:

cherrypy.request.params.get('the_link')

所以你的随机化函数应该是这样的:

@cherrypy.expose
def randomize(self, *args,**kwargs):
    self.string=cherrypy.request.params.get('the_link')
    random_string = self.generate_random_string()
    log_statement = self.string + " converted to: " + random_string
    return log_statement

你的 generate_random_string 函数应该是这样的:

def generate_random_string(self,length=6):
    letters = self.string.lower()
    print("length: " + str(length))
    print(letters)
    result_str = ''.join(random.sample(letters, k=length))
    print("Random String is:", result_str)
    return result_str

【讨论】:

    【解决方案2】:

    您应该在定义 generate_random_string 时提供添加参数。当您调用实例方法时。实例本身总是作为第一个参数传递。

    class MyWebService(object):
    
    def generate_random_string(self, length = 6):
        letters = string.ascii_lowercase
        print("length: " + str(length))
        result_str = ''.join(random.sample(letters, k = length))
        print("Random String is:", result_str)
        return result_str
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2011-05-29
      • 2016-02-17
      相关资源
      最近更新 更多