Чтение входных данных из HTML-формы в CherryPy

#python #html #rest #cherrypy

#python #HTML #остальное #cherrypy

Вопрос:

Я хочу прочитать значение из 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() Функция работает, как и ожидалось, вне этого исходного файла.

Комментарии:

1. Начните с указания generate_random_string аргумента «self».

Ответ №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:

Вы должны предоставить аргумент add при определении 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