@Radiss

Два локальных сервера на python — как реализовать?

Решаю задачник по питону и застрял на этом.

Есть сервер для генерации текстов

server.py

spoiler

from bottle import route, run, view
from datetime import datetime as dt
from random import random

@route("/")
@view("predictions")
def index():
    now = dt.now()

    x = random()

    return {
        "date": f"{now.year}-{now.month}-{now.day}",
        "predictions": [
            "После обеда ожидайте неожиданного праздника.",
            "Днём предостерегайтесь неожиданного праздника.",
            "Утром ожидайте гостей из забытого прошлого.",
        ],
        "special_date": x > 0.5,
        "x": x,
    }

@route("/api/forecasts")
def api_forecasts():
    now = dt.now()

    x = random()

    return {
        "date": f"{now.year}-{now.month}-{now.day}",
        "prophecies": [
            "После обеда ожидайте неожиданного праздника.",
            "Днём предостерегайтесь неожиданного праздника.",
            "После восхода ожидайте гостей из забытого прошлого.",
            "После полудня ожидайте гостей из забытого прошлого.",
            "После заката гостей из забытого прошлого.",
        ],
        "special_date": x > 0.5,
        "x": x,
    }


run(
    host="localhost",
    port=8080,
    autoload=True
)



horoscope.py
spoiler

# coding=utf-8

import random

times = ["утром", "днём", "вечером", "ночью", "после обеда", "перед сном"]
advices = ["ожидайте", "предостерегайтесь", "будьте открыты для"]
promises = ["гостей из забытого прошлого", "встреч со старыми знакомыми",
            "неожиданного праздника", "приятных перемен"]


def generate_prophecies(total_num=5, num_sentences=3):
    prophecies = []

    i = 0
    while i < total_num:
        j = 0
        forecast = ""
        while j < num_sentences:
            t = random.choice(times)
            a = random.choice(advices)
            p = random.choice(promises)

            full_sentence = t.title() + " " + a + " " + p + "."
            if j != num_sentences - 1:
                full_sentence = full_sentence + " "

            forecast = forecast + full_sentence
            j = j + 1

        prophecies.append(forecast)
        i = i + 1

    return prophecies


По localhost:8080/api/forecasts должно возвращаться 6 разных предложений, но рандомности нет

api/forecasts.tpl

spoiler

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">


  <link rel="stylesheet" type="jquery" href="jquery-3.4.1.min.js">


    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">


    <title>2</title>
</head><body>

    <div class="container">
        <h1>Что день {{ date }} готовит</h1>

        % if special_date:
        <h2>Text</h2>
        % end

        % for pred in predictions:
        <p>{{ pred }}</p>
        % end


    </div>
    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->

    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>

  </body>
  <script language="javascript">
      console.log( {{ x }} );
  </script>
</html>



реализация должна быть как здесь с плагином jsonview

Полученные в таком виде prophecies надо отобразить по нажатию на заголовок (Что день готовит..)

Примерная реализация js

<div class="row">
          <div class="col" id="p-2">
            function set_content_in_divs(paragraphs) {
              $.each(paragraphs, function(i, d) {
                p = $("#p-" +i)
                p.html("<p>" + d + "</p>")
            })

        </div>
          <div class="row">
          <div class="col" id="p-3">
          </div>


Но куда этот js вставить, не ясно.
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы