Локальный сервер Python для URL обратного вызова

#python #oauth-2.0 #localhost

#python #oauth-2.0 #localhost

Вопрос:

Я работаю над проектом oauth, который требует от меня наличия URL обратного вызова, который может быть загружен после успешной авторизации для запроса токенов доступа, но я не уверен, как я могу запустить этот сервер надлежащим образом. Я знаком с полезной однострочной настройкой сервера python python -m http.server , но это просто загрузит каталог, в котором я запустил сервер, и будет действовать как сервер для навигации по файлам в этом каталоге.

Есть ли предпочтительный способ настроить простой сервер, который можно использовать для этого процесса перенаправления, и выполнить дополнительный вызов сервера, который мне нужен? Нужно ли мне использовать веб-фреймворк, такой как Django?

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

1. вам нужен сервер, который может запускать код на сервере (Python / PHP / Ruby / etc.) Вы могли бы использовать опцию --cgi ( python -m http.server --cgi ), и тогда он сможет запускать сценарии в папке cgi-bin http://localhost/cgi-bin/script.py . Но CGI метод очень старый и, вероятно, более полезным может быть использование чего-то более нового, такого как веб-фреймворк Flask , Bottle , Django

Ответ №1:

С помощью python -m http.server вы можете обслуживать только статические файлы, но вам нужно запустить некоторый код, который получает аргументы и использует их.

Вы могли бы использовать опцию --cgi в python -m http.server --cgi , а затем вы могли бы поместить скрипт (на любом языке) в папку cgi-bin и запустить его http://localhost/cgi-bin/script.py .

Но метод с CGI очень старый, и может быть намного проще использовать некоторые веб- microframework такие Flask , как или bottle

script.py

 from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    print('args:', request.args)  # display text in console
    #print('form:', request.form)
    #print('data:', request.data)
    #print('json:', request.json)
    #print('files:', request.files)
    
    return request.args.get('data', 'none')  # send text to web browser

if __name__ == '__main__':
    app.run(port=80, debug=True)
  

И запустите его как python script.py и протестируйте в веб-браузере

 http://127.0.0.1/?data=qwerty
  

И request.args.get("data") должен предоставить вам qwerty информацию, которую вы можете использовать в коде Python.

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

1. Спасибо за объяснение! Это было чрезвычайно полезно!