Вызывать различные функции обратного вызова для приложения Python3 / uwsgi - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать простое веб-приложение на Python, используя только uWSGI в качестве веб-сервера. Используя руководство Quickstart из Документов uWSGI, я смог запустить простое приложение "Hello world". Моя конечная цель состоит в том, чтобы создать веб-сайт, использующий этот набор, в котором URL будет: "http://localhost: 9090 ", и другой веб-сайт / страница с URL-адресом: "http://localhost : 9090 / привет ». Если URL не соответствует ни одному из них, я хочу отобразить «404 НЕ НАЙДЕНО». У меня есть следующий код сервера:

import re

def index(environ, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b'<h1>This is the index web page</h1>']

def hello(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>This is another web page</h1>']

def not_found(environ, start_response):
    """Called if no URL matches."""
    start_response('404 NOT FOUND', [('Content-Type', 'text/plain')])
    return ['Not Found']

# 'urls' is a list that maps urls to functions
urls = [
    (r'^$', index),  # if url is: '/' then go to function 'index'
    (r'hello/?$', hello) # if url is '/hello/' or '/hello' then go to function "hello
]

def application(environ, start_response):
    '''
    This is the main method/function. It dispatches the current http request to the
    functions above.
    '''
    path = environ.get('PATH INFO', '').lstrip('/')
    for regex, callback in urls:
        match = re.search(regex, path)
        if match is not None:
            return callback(environ, start_response)
        return not_found(environ, start_response)

Когда я запускаю сервер с помощью команды "uwsgi --http-socket: 9090 --wsgi-file foo.py", а затем открываю браузер и набираю " http://localhost: 9090", затем отображается правильный html. Но когда я изменяю URL на «http://localhost: 9090 / hello », я получаю только предыдущий вывод, то есть функция index () вызывается снова, а не функция hello ().

Вывод с сервера:

  • для URL "http:localhost: 9090": GET / => сгенерировано 35 байтов в 0 мсек
  • для URL "http:localhost: 9090 / hello ": GET / hello => сгенерировал 35 байтов за 0 мсек

Кроме того, я попытался напечатать переменные 'path' и 'regex' и получаю для обоих URL путь = '' и regex = '^ $', поэтому кажется, что расширение '/ hello' не распознано для второго URL, поэтому оно совпадает с regex = '^ $' и вызывает функцию обратного вызова 'index' вместо 'hello' -функции. Что я делаю не так?

...