Вход на внешний сайт с flask - PullRequest
0 голосов
/ 03 мая 2020

В настоящее время у меня возникают некоторые проблемы с моим flask веб-приложением, где я написал его, как показано ниже, но когда я пытаюсь запустить приложение flask, я сталкиваюсь с ошибкой неверного запроса. (Браузер (или прокси-сервер) отправил запрос, который этот сервер не может понять)

По сути, я пытаюсь разрешить пользователям входить на внешний веб-сайт через flask webapp

В чем причина этой ошибки? Извиняюсь, если я делаю глупую ошибку, я очень плохо знаком с flask.

from flask import Flask,render_template, request, redirect
import requests
from bs4 import BeautifulSoup as bs


app = Flask(__name__)

@app.route('/', methods = ["POST", "GET"])
def login():
    username = request.form['username']
    pin = request.form['password']
    s = requests.Session()
    r = s.get("https://www.example.com/User/Login")
    soup = bs(r.text, 'html.parser')
    loginToken = soup.findAll(attrs={"name" : "__RequestVerificationToken"})[0]['value']
    #Create Login Payload
    login_payload = {
    "__RequestVerificationToken" : loginToken,
    "UserName" : username,
    "Password" : pin,
    "returnUrl" : "https://example.com/user-action/?action=login&returnUrl=https://www.example.com/User/Information",
    }
    #Post Login Payload
    r = s.post("https://www.example.com/Account/Login", data = login_payload)
    if r.status_code == 200:
        return render_template('home.html')
    else:
        return render_template('login.html')
    return render_template('login.html')

@app.route('/home') #If login works, redirect to this page
def hello_world():
    return 'Hello, World!'


if __name__ == "__main__":
    app.run(debug = True)

Кроме того, если есть другие ресурсы, на которые я мог бы сослаться относительно разрешения пользователю войти в систему на внешний URL-адрес из веб-приложения flask по сравнению с обычными учебными пособиями, в которых только пользователь регистрируется в самом веб-приложении flask, поделитесь им со мной, спасибо!

1 Ответ

0 голосов
/ 03 мая 2020

У вашей конечной точки есть два глагола Http ["POST", "GET"]. Вы должны указать свои методы, как показано ниже.

@app.route('/', methods = ["POST", "GET"])
def login():
   if request.method == "GET":
     #something do stuff
     return render_template("your_html_page")
   if request.method == "POST":
     #something do stuff
     return your_response, 200

Отредактированный блок

@app.route('/', methods = ["POST", "GET"])
def login():
    if request.method == "GET":
        return render_template('login.html')
    if request.method == "POST":
        #same logic here
        if status_code == 200:
            return redirect(url_for('home'))
        return render_template('login.html')
...