Найти - Пользователи
Полная версия: Динамическое обновление Web содержимого Flask сервера при получении Get запроса
Начало » Web » Динамическое обновление Web содержимого Flask сервера при получении Get запроса
1 2
Dessan
Нужно, чтоб содержимое страницы обновлялось при получении каждого Get запроса.
 from flask import Flask, render_template, request
from waitress import serve
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/', methods=['GET', 'POST']) #  
def index():
	if request.method == 'GET':
		username = request.args.get('username', '')
		password = request.args.get('password', '')
		print(username)
		print(password)
                ourstring = "username={0}&password={1}".format(username, password)
        return '<html><body><h1>Hello World {}</h1></body></html>'.format(ourstring)
		
	
if __name__ == "__main__":
    app.debug = True 
    serve(app, host='192.168.0.103', port=5000)

Вот наш запрос к серверу.
  Get http://192.168.0.103:5000/?username=user&password=12345

Как сделать так, чтоб при получении этого get запроса у нас выводилась Html страница:
 <html><body><h1>Hello World username=user&password=12345</h1></body></html>

И текст страницы сам обновлялся при получении других параметров.
Dessan
Я не понимаю в чём проблема сделать динамическое отображение, задача элементарная, но ничего не работает, примеров найти не могу, я уже не знаю что делать, два дня сижу гуглю и перебираю варианты. Если просто вбить в адресную строку
 http://192.168.0.103:5000/?username=user&password=12345
то все работает, а через get ничего не работает.
Dessan
При этом команды print(username) и print(password) выводятся прекрасно в консоль, а в web не отображаются
py.user.next
Dessan
Если просто вбить в адресную строку
http://192.168.0.103:5000/?username=user&password=12345
то все работает
Так это и есть GET-запрос.

Dessan
а через get ничего не работает
Что значит get? Какой get?
Dessan
py.user.next
Что значит get? Какой get?
Это который через ajax формируется, а не просто в адресную строку вбить вручную нужные символы для открытия страницы
py.user.next
Dessan
Это который через ajax формируется
А Flask тут при чём? Ты вообще понимаешь, что AJAX работает внутри браузера? Дальше браузера он не выходит.

Можешь запостить сюда код на JavaScript. Возможно, ты делаешь межсайтовый запрос. С этим могут быть проблемы. Но это не во Flask'е и не в Waitress дело, а в сам браузер защита встроена.
Dessan
Ну, конечно AJAX внутри браузера и конечно же выходит. А Flask при том, что это СЕРВЕР и должен принимать запросы и их обрабатывать иначе на кой он вообще нужен. И, конечно, межсайтовый. Если flask способен только на return “Hello world” то он даром никому не нужен. И запрос отправляется и запрос приходит на сервер и браузер все пропускает, для того и CORS задействован. Тебе код Javascript надо? Вот тебе код javascript:

 <html lang="en">
 
 <head>
     <meta http-equiv="Access-Control-Allow-Origin" content="*">
     <meta charset="utf-8">
     <title></title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(function() {
    $('button').click(function() {
        $.ajax({
            url: 'http://192.168.0.103:5000',
            data: $('form').serialize(),
            type: 'GET',
            dataType: 'json',
            success: function(response) {         
                  console.log(response);
               
            },
            error: function(error) {
                console.log("Error");
                console.log(error.responseText);
                              
            }
        });
    });
 
});</script>
 
 </head>
 <body>
 
     <div class="container">
 
         <form class="form-signing" role="form">  
             <h2 class="form-signing-heading">Please Sign Up </h2>
             <input type="email" name="username" class="form-control" placeholder="Username" required autofocus>
             <input type="password" name="password" class="form-control" placeholder="Password" required>
 
             <button class="btn btn-lg btn-primary btn-block" type="button">Register </button>
         </form>
      
     </div>
 
 </body></html>

Сервер flask принимает его и отрабатывает обе команды print(username) и print(password), а в страницу ничего не пишет. В этом и проблема.
FishHook
Dessan
“Обычный” веб без аякса, это когда вы сабмитите форму и полученный от сервера ответ браузер использует как HTML для новой отрисовки страницы. То есть страница перезагружается с новым содержимым.
Веб с аяксом, это когда вы не сабмитите форму, а отправляете данные из браузера на сервер джаваскриптом, получаете ответ и с помощью джаваскрипта решаете, что с этим ответом делать. Страница при этом не перезагружаетеся.
Вы отправляете вот это
 return '<html><body><h1>Hello World {}</h1></body></html>'.format(ourstring)
в ответ на аякс запрос. Вот “это” ваш джаваскрипт должен сделать с ответом
             success: function(response) {         
                  console.log(response);
               
            },
то есть просто отобразить в консоли браузера - response это и есть та строка, которая приходит от сервера.
Оно отображается? Думаю да. А больше ничего происходить и не должно.
Dessan
А как сделать так, чтоб что-то произошло на странице сервера?
FishHook
Dessan
А как сделать так, чтоб что-то произошло на странице сервера?
Знаете, вам сложно оппонировать.
Вы довольно самоуверенно и даже я бы сказал агрессивно выше заявляли вашу экспертизу в вопросах веб-приложений. Вы и про Ajax знаете, и про CORS знаете и jquery владеете, и get от post различать умеете и хелловорды вы давно уже переросли. А самого базового то вы оказывается и не знаете. Ну и как вам теперь помогать?
Если вы знаете jquery, то в чем у вас проблема распарсить ответ сервера и вставить в любой тег по вкусу? Без обид, я не пытаюсь поучать, я просто не понимаю, как так получается, что вы во всю используете джаваскрипт, а потом задаете вопрос “А как сделать так, чтоб что-то произошло на странице сервера?” Да охренеть, мужик, я могу догататься, что “страница сервера” это оговорка, но джаваскрипт для того и нужен, чтобы изменять структуру страницы. Ну это как иметь троих детей, и не знать как трахаться. Такое просто не налезает на голову и непонятно, что в этом случае советовать.

По сабжу, не нужен вам Ajax, вообще. Не используйте его, не используйте javascript, если не знаете что с ним делать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB