1
0
Fork 0
mirror of https://github.com/EDeev/yandex_lyceum.git synced 2026-10-07 20:49:29 +03:00

Ключ API Яндекс.Карт и SECRET_KEY из окружения, зависимости только используемые

requirements.txt сокращён до Flask, Flask-WTF, WTForms, requests и Pillow; Werkzeug
закреплён на 2.3 — с Werkzeug 3 Flask-WTF 1.1 не импортируется.
This commit is contained in:
Деев Егор Викторович 2026-10-02 21:18:33 +00:00
parent 37d30ee29f
commit 968588eea1
4 changed files with 116 additions and 18 deletions

View file

@ -0,0 +1,14 @@
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
id_user = StringField('Id астронавта', validators=[DataRequired()])
pas_user = PasswordField('Пароль астронавта', validators=[DataRequired()])
id_cap = StringField('Id капитана', validators=[DataRequired()])
pas_cap = PasswordField('Пароль капитана', validators=[DataRequired()])
# remember_me = BooleanField('Запомнить меня') <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
submit = SubmitField('Доступ')

View file

@ -0,0 +1,55 @@
import os
from flask import Flask, render_template, redirect
from loginform import LoginForm
app = Flask(__name__)
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'yandexlyceum_secret_key')
@app.route('/<label>')
@app.route('/index/<label>')
def index(label):
param = {'label': 'И на Марсе будут яблони цвести!', 'title': label}
return render_template('index.html', **param)
@app.route('/training/<prof>')
def training(prof):
param = {'title': "Тренировки в полёте", "spec": prof}
return render_template('training.html', **param)
@app.route('/list_prof/<var>')
def list_prof(var):
param = {'title': "Список профессий", "var": var}
return render_template('list_prof.html', **param)
@app.route('/answer')
@app.route('/auto_answer')
def answer():
param = {'title': "Анкета", 'surname': "Фёдоров", 'name': "Марк", 'education': "Среднее", 'profession': " Писатель",
'sex': "Male", 'motivation': "Распространить хип-хоп в космос!", 'ready': "True"}
return render_template('auto_answer.html', **param)
@app.route('/login', methods=['GET', 'POST'])
def login():
param = {'title': "Аварийный доступ"}
form = LoginForm()
if form.validate_on_submit():
return redirect('/success')
return render_template('login.html', **param, form=form)
@app.route('/distribution')
def success():
param = {'title': "По каютам!", "users": ['Ридли Скотт', 'Энди Уир', 'Марк Уотни', "Венката Капур",
'Тедди Сандерс', 'Шон Бин']}
return render_template('distribution.html', **param)
if __name__ == '__main__':
app.run(port=8080, host='127.0.0.1')

View file

@ -0,0 +1,46 @@
import os
from io import BytesIO
from PIL import Image
from delta import delta
import requests
search_api_server = "https://search-maps.yandex.ru/v1/"
api_key = os.environ.get("YANDEX_API_KEY", "")
address_ll = "37.588392,55.734036"
search_params = {
"apikey": api_key,
"text": "магазин",
"lang": "ru_RU",
"ll": address_ll,
"type": "biz"
}
response = requests.get(search_api_server, params=search_params)
if not response:
pass
json_response = response.json()
organization = json_response["features"][0]
org_name = organization["properties"]["CompanyMetaData"]["name"]
org_address = organization["properties"]["CompanyMetaData"]["address"]
point = organization["geometry"]["coordinates"]
org_point = "{0},{1}".format(point[0], point[1])
delta = delta(point, address_ll)
map_params = {
"ll": address_ll,
"spn": ",".join([delta, delta]),
"l": "map",
"pt": "{0},pm2dgl".format(org_point)
}
map_api_server = "http://static-maps.yandex.ru/1.x/"
response = requests.get(map_api_server, params=map_params)
Image.open(BytesIO(
response.content)).show()

View file

@ -1,23 +1,6 @@
# Core Flask Framework
Flask==2.3.3
Jinja2==3.1.2
# Flask Extensions
Werkzeug==2.3.8
Flask-WTF==1.1.1
WTForms==3.0.1
# HTTP Client Library
requests==2.31.0
# Image Processing
Pillow==10.0.1
# Security
cryptography==41.0.7
# Development Dependencies
python-dotenv==1.0.0
# Optional: Testing Framework
pytest==7.4.3
pytest-flask==1.3.0