#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