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:
parent
37d30ee29f
commit
968588eea1
4 changed files with 116 additions and 18 deletions
14
02-flask-wtf-forms/loginform.py
Normal file
14
02-flask-wtf-forms/loginform.py
Normal 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('Доступ')
|
||||||
|
|
||||||
|
|
||||||
55
02-flask-wtf-forms/server.py
Normal file
55
02-flask-wtf-forms/server.py
Normal 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')
|
||||||
46
03-yandex-maps-search/main.py
Normal file
46
03-yandex-maps-search/main.py
Normal 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()
|
||||||
|
|
@ -1,23 +1,6 @@
|
||||||
# Core Flask Framework
|
|
||||||
Flask==2.3.3
|
Flask==2.3.3
|
||||||
Jinja2==3.1.2
|
Werkzeug==2.3.8
|
||||||
|
|
||||||
# Flask Extensions
|
|
||||||
Flask-WTF==1.1.1
|
Flask-WTF==1.1.1
|
||||||
WTForms==3.0.1
|
WTForms==3.0.1
|
||||||
|
|
||||||
# HTTP Client Library
|
|
||||||
requests==2.31.0
|
requests==2.31.0
|
||||||
|
|
||||||
# Image Processing
|
|
||||||
Pillow==10.0.1
|
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
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue