diff --git a/data/__all_models.py b/data/__all_models.py index bc265d5..3ad4e9c 100644 --- a/data/__all_models.py +++ b/data/__all_models.py @@ -1 +1 @@ -from . import users, diary_post, questions, answer_quest, like, popularity \ No newline at end of file +from . import users, diary_post, questions, answer_quest, like, popularity, app_school_user_point \ No newline at end of file diff --git a/data/app_school_user_point.py b/data/app_school_user_point.py new file mode 100644 index 0000000..4ce15ed --- /dev/null +++ b/data/app_school_user_point.py @@ -0,0 +1,15 @@ +import sqlalchemy +from flask_login import UserMixin + +from .db_session import SqlAlchemyBase + + +class UserPoint(SqlAlchemyBase, UserMixin): + __tablename__ = 'user_point' + + id = sqlalchemy.Column(sqlalchemy.Integer, + primary_key=True, autoincrement=True) + user = sqlalchemy.Column(sqlalchemy.Integer, + sqlalchemy.ForeignKey("users.id"), nullable=True) + home_address = sqlalchemy.Column(sqlalchemy.String, nullable=True) + school_address = sqlalchemy.Column(sqlalchemy.String, nullable=True) diff --git a/forms/point_user.py b/forms/point_user.py new file mode 100644 index 0000000..a022c4c --- /dev/null +++ b/forms/point_user.py @@ -0,0 +1,8 @@ +from flask_wtf import FlaskForm +from wtforms import TextAreaField, SubmitField + + +class PointForm(FlaskForm): + home_address = TextAreaField('Адрес дома:') + school_address = TextAreaField('Адрес школы:') + submit = SubmitField('Сохранить') diff --git a/forms/register.py b/forms/register.py index bb3e737..2fac0e2 100644 --- a/forms/register.py +++ b/forms/register.py @@ -18,6 +18,7 @@ class RegisterForm(FlaskForm): del_photo = SubmitField('Удалить фотографию') submit2 = SubmitField('Сохранить') simple = False + back = False class Confirmation(FlaskForm): diff --git a/main.py b/main.py index 352565c..aae6b04 100644 --- a/main.py +++ b/main.py @@ -1,20 +1,24 @@ import datetime +import logging import os from random import randint, choices -from waitress import serve -import logging -from flask import Flask, render_template, request, jsonify, make_response +from flask import Flask, render_template, request, jsonify, make_response, session, url_for from flask_login import LoginManager, login_user, logout_user, login_required, current_user from flask_restful import abort +from waitress import serve from werkzeug.utils import redirect +from threading import Timer + from data import db_session +from data.app_school_user_point import UserPoint from data.answer_quest import Answer from data.diary_post import DiaryPost from data.like import Like from data.popularity import Popularity from data.questions import Quest from data.users import User +from forms.point_user import PointForm from forms.add_question import AddQuest from forms.answer_quest import AnswerQuest from forms.login import LoginForm @@ -36,6 +40,10 @@ photo = None user_email = "" +def remove_java(): + os.remove('static/js/safe_app_school/mapbasics.js') + + def norm_data(datatime, date_or_time, r=False): if date_or_time == 'date': return '.'.join(str(datatime).split()[0].split('-')[::-1]) @@ -69,28 +77,267 @@ def load_user(user_id): db_sess = db_session.create_session() return db_sess.query(User).get(user_id) + @app.route('/') def main_page(): - return render_template('/main/main.html') - -@app.route('/safeappschool/login') -def safe_app_school_login(): - pass + return render_template('/main/main.html', title='Добро пожаловать') -@app.route('/safeappschool/main') +@app.route('/login', methods=['GET', 'POST']) +def login(): + form = LoginForm() + if form.validate_on_submit(): + db_sess = db_session.create_session() + user = db_sess.query(User).filter(User.email == form.email.data).first() + if user and user.check_password(form.password.data): + login_user(user, remember=form.remember_me.data) + return redirect('/') + return render_template('main/login.html', + message="Неправильный логин или пароль", + form=form) + return render_template('main/login.html', title='Авторизация', form=form, message='') + + +@app.route('/register', methods=['GET', 'POST']) +def register(): + form = RegisterForm() + form.simple = True + if form.validate_on_submit(): + if form.password.data != form.password2.data: + return render_template('main/register.html', title='Регистрация', + form=form, + message="Пароли не совпадают") + data_session = db_session.create_session() + if data_session.query(User).filter(User.login == form.login.data).first(): + return render_template('main/register.html', title='Регистрация', + form=form, + message="Такой пользователь уже есть") + if data_session.query(User).filter(User.email == form.email.data).first(): + return render_template('main/register.html', title='Регистрация', + form=form, + message="Такая почта уже есть") + if form.photo.data: + photo = save_photo(form.photo.data, form.login.data) + else: + photo = False + session['ps'] = form.password.data + return redirect( + url_for('confirmation', photo=photo, name=form.name.data, surname=form.surname.data, login=form.login.data, + age=form.age.data, about=form.about.data, email=form.email.data, form=True)) + return render_template('main/register.html', title='Регистрация', form=form, message='') + + +@app.route('/confirmation', methods=['GET', 'POST']) +def confirmation(): + if request.args.get('form'): + app_school = request.args.get('app_school') if request.args.get('app_school') else False + data_session = db_session.create_session() + form = RegisterForm( + name=request.args.get('name'), + surname=request.args.get('surname'), + login=request.args.get('login'), + age=request.args.get('age'), + about=request.args.get('about'), + email=request.args.get('email'), + password=session['ps'] + ) + session['photo'] = request.args.get('photo') + if 'send_msg' not in session: + session['secret_code'] = secret_key() + mail(f'Ваш секретный код: {session["secret_code"]}', form.email.data, 'Moona Код') + session['send_msg'] = True + else: + if not session['send_msg']: + if 'no_code' in session: + if not session['no_code']: + session['secret_code'] = secret_key() + mail(f'Ваш секретный код: {session["secret_code"]}', form.email.data, 'Moona Код') + session['send_msg'] = True + session['no_code'] = False + else: + session['secret_code'] = secret_key() + mail(f'Ваш секретный код: {session["secret_code"]}', form.email.data, 'Moona Код') + session['send_msg'] = True + session['send_msg'] = False + conf = Confirmation() + if conf.validate_on_submit(): + if str(conf.code_key.data).strip() == str(session['secret_code']).strip(): + if form.photo.data: + user = User( + name=form.name.data, + surname=form.surname.data, + login=form.login.data, + age=form.age.data, + about=form.about.data, + email=form.email.data, + photo=session['photo'], + role='user' + ) + else: + user = User( + name=form.name.data, + surname=form.surname.data, + login=form.login.data, + age=form.age.data, + about=form.about.data, + email=form.email.data, + role='user', + photo='../../static/img/None_logo.png' + ) + user.set_password(form.password.data) + data_session.add(user) + data_session.commit() + session['send_msg'] = False + if app_school: + return redirect('/safeappschool/login') + else: + return redirect('/login') + else: + session['no_code'] = True + if app_school: + return render_template('simple/simple_confirmation.html', title='Подтверждение', form=conf, + message='Коды не совпадают') + else: + return render_template('main/confirmation_reg.html', title='Подтверждение', form=conf, + message='Коды не совпадают') + else: + if app_school: + return render_template('simple/simple_confirmation.html', title='Подтверждение', form=conf, message='') + else: + return render_template('main/confirmation_reg.html', title='Подтверждение', form=conf, message='') + else: + return redirect('/') + + +@app.route('/logout') +@login_required +def logout(): + logout_user() + return redirect("/") + + +@app.route('/safeappschool') +def safe_app_school(): + return redirect('/safeappschool/main') + + +@app.route('/safeappschool/main', methods=['GET', 'POST']) def safe_app_school_main(): - pass + if current_user.is_authenticated: + return render_template('safe_app_school/main.html', title='SafeAppSchool') + else: + return redirect('/safeappschool/login') + + +@app.route('/safeappschool/login', methods=['GET', 'POST']) +def safe_app_school_login(): + form = LoginForm() + if form.validate_on_submit(): + db_sess = db_session.create_session() + user = db_sess.query(User).filter(User.email == form.email.data).first() + if user and user.check_password(form.password.data): + login_user(user, remember=form.remember_me.data) + return redirect('/safeappschool/main') + return render_template('/simple/simple_login.html', + message="Неправильный логин или пароль", + form=form) + return render_template('/simple/simple_login.html', title='Вход', form=form, message='') + + +@app.route('/safeappschool/register', methods=['GET', 'POST']) +def safe_app_school_register(): + form = RegisterForm() + form.simple = True + if form.validate_on_submit(): + if form.password.data != form.password2.data: + return render_template('simple/simple_register.html', title='Регистрация', + form=form, + message="Пароли не совпадают") + data_session = db_session.create_session() + if data_session.query(User).filter(User.login == form.login.data).first(): + return render_template('simple/simple_register.html', title='Регистрация', + form=form, + message="Такой пользователь уже есть") + if data_session.query(User).filter(User.email == form.email.data).first(): + return render_template('simple/simple_register.html', title='Регистрация', + form=form, + message="Такая почта уже есть") + if form.photo.data: + photo = save_photo(form.photo.data, form.login.data) + else: + photo = False + session['ps'] = form.password.data + return redirect( + url_for('confirmation', photo=photo, name=form.name.data, surname=form.surname.data, + login=form.login.data, + age=form.age.data, about=form.about.data, email=form.email.data, form=True, app_school=True)) + return render_template('simple/simple_register.html', title='Регистрация', form=form, message='') @app.route('/safeappschool/about') def safe_app_school_about(): - pass + if current_user.is_authenticated: + return render_template('safe_app_school/about.html') + else: + return redirect('/safe_app_school/login') -@app.route('/safeappschool/go') -def safe_app_school_go(): - pass +@app.route('/safeappschool/setting', methods=['GET', 'POST']) +def safe_app_school_setting(): + if current_user.is_authenticated: + form = PointForm() + data_session = db_session.create_session() + point = data_session.query(UserPoint).filter(UserPoint.user == current_user.id).first() + if form.validate_on_submit(): + if point: + point.school_address = form.school_address.data + point.home_address = form.home_address.data + else: + point = UserPoint( + user=current_user.id, + home_address=form.home_address.data, + school_address=form.school_address.data + ) + data_session.add(point) + data_session.commit() + data_session.close() + return redirect('/safeappschool/main') + if point: + form.school_address.data = point.school_address + form.home_address.data = point.home_address + return render_template('safe_app_school/setting.html', form=form, message='') + else: + return redirect('/safe_app_school/login') + + +@app.route('/safeappschool/go/') +def safe_app_school_go(point): + if current_user.is_authenticated: + data_session = db_session.create_session() + address = data_session.query(UserPoint).filter(UserPoint.user == current_user.id).first() + if address.school_address and address.home_address: + with open('static/js/safe_app_school/mapbasics_templates.js', 'r', encoding='utf-8') as file: + new_file = file.read().split('') + new_file = new_file[0] + f'\'{address.home_address if point == "home" else address.school_address}\'' \ + + new_file[1] + new_file = new_file.split('') + new_file = new_file[ + 0] + f'\'{address.school_address if point == "home" else address.home_address}\'' + \ + new_file[1] + with open('static/js/safe_app_school/mapbasics.js', 'w', encoding='utf-8') as new_js: + new_js.write(new_file) + t = Timer(1, remove_java, args=None, kwargs=None) + t.start() + if point == 'home': + return render_template('safe_app_school/route.html', title='Маршрут домой', route='домой') + elif point == 'school': + return render_template('safe_app_school/route.html', title='Маршрут в школу', route='в школу') + else: + return redirect('/safe_app_school/main') + else: + return render_template('safe_app_school/route.html', title='Маршрут не указан', route=False) + else: + return redirect('/safe_app_school/login') @app.route('/diary/') @@ -653,13 +900,13 @@ def diary(): @app.route('/diary/logout') @login_required -def logout(): +def diary_logout(): logout_user() return redirect("/diary/") @app.route('/diary/login', methods=['GET', 'POST']) -def login(): +def diary_login(): form = LoginForm() if form.validate_on_submit(): db_sess = db_session.create_session() @@ -674,7 +921,7 @@ def login(): @app.route('/diary/confirmation', methods=['GET', 'POST']) -def confirmation(): +def diary_onfirmation(): global help_arg if help_arg: global send_msg @@ -724,13 +971,13 @@ def confirmation(): return redirect('/diary/login') else: if form.simple: - return render_template('simple_confimication.html', title='Подтверждение', form=conf, + return render_template('simple/simple_confirmation.html', title='Подтверждение', form=conf, message='Коды не совпадают') else: return render_template('diary/confirmation_reg.html', title='Подтверждение', form=conf, message='Коды не совпадают') if form.simple: - return render_template('simple_confimication.html', title='Подтверждение', form=conf, + return render_template('simple/simple_confirmation.html', title='Подтверждение', form=conf, message='Коды не совпадают') else: return render_template('diary/confirmation_reg.html', title='Подтверждение', form=conf, message='') @@ -751,7 +998,7 @@ def confirmation(): return redirect('/diary/profile') if form.simple: - return render_template('simple_confimication.html', title='Подтверждение', form=conf, + return render_template('simple_confirmation.html', title='Подтверждение', form=conf, message='Коды не совпадают') else: return render_template('diary/confirmation_reg.html', title='Подтверждение', form=conf, message='') @@ -760,7 +1007,7 @@ def confirmation(): @app.route('/diary/register', methods=['GET', 'POST']) -def register(): +def diary_register(): global help_arg global photo form = RegisterForm() diff --git a/static/css/diary/register.css b/static/css/diary/register.css index 821ec6d..9e7533c 100644 --- a/static/css/diary/register.css +++ b/static/css/diary/register.css @@ -6,7 +6,7 @@ margin-top: 35px; } .title { -text-align: center; + text-align: center; } input[type=text], input[type=email], input[type=password], input[type=file], input[type=number]{ padding:10px; diff --git a/static/css/main/base.css b/static/css/main/base.css new file mode 100644 index 0000000..314d692 --- /dev/null +++ b/static/css/main/base.css @@ -0,0 +1,6 @@ +body { + background-image: url('../../img/big_back_moona.png'); + font-family: 'Comfortaa', sans-serif; + background-color: #f0ffff; + margin-bottom: 200px; +} \ No newline at end of file diff --git a/static/css/main/confirmation_reg.css b/static/css/main/confirmation_reg.css new file mode 100644 index 0000000..b38bdbf --- /dev/null +++ b/static/css/main/confirmation_reg.css @@ -0,0 +1,43 @@ +.confirmation { + margin-top: 5%; +} +.confirmation { + width: 60%; + margin-left: 20%; + margin-right: 20%; +} +.confirmation_form { + display: flex; + flex-flow: column wrap; +} +.form_buttons { + margin-top: 10px; + display: flex; + justify-content: space-evenly; +} +.header_title { + text-align: center; + color: white; + margin-left: 27%; + margin-right: 27%; + width: 46%; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 43; + text-shadow: 0px 0px 20px #ffffff; +} +.back { + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 19px; + border: 2px solid #ffffff; + width: 10%; + margin-left: 12px; + height: 42px; +} +.back_text { + margin-top: 7%; + text-align: center; +} \ No newline at end of file diff --git a/static/css/main/login.css b/static/css/main/login.css new file mode 100644 index 0000000..6584a85 --- /dev/null +++ b/static/css/main/login.css @@ -0,0 +1,48 @@ +.login { + margin-top: 5%; +} +.header_title { + text-align: center; + color: white; + margin-left: 27%; + margin-right: 27%; + width: 46%; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 53; + text-shadow: 0px 0px 20px #ffffff; +} +.login { + width: 60%; + margin-left: 20%; + margin-right: 20%; +} +.login_form { + display: flex; + flex-flow: column wrap; +} +.form_buttons { + display: flex; + justify-content: space-evenly; +} +.box { + margin-left: 20px; +} +.button_form { + width: 200px; +} +.back { + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 19px; + border: 2px solid #ffffff; + width: 10%; + margin-left: 12px; + height: 42px; +} +.back_text { + margin-top: 7%; + text-align: center; +} \ No newline at end of file diff --git a/static/css/main/main.css b/static/css/main/main.css index 51e0bc9..05ca6e2 100644 --- a/static/css/main/main.css +++ b/static/css/main/main.css @@ -1,16 +1,8 @@ -body { - background-image: url('../../img/big_back_moona.png'); - font-family: 'Comfortaa', sans-serif; - background-color: #f0ffff; -} .header, .body { width: 70%; margin-left: auto; margin-right: auto; } -.body { - margin-top: 5%; -} .header_logo { width: 60%; margin-left: 20%; @@ -58,7 +50,6 @@ body { margin-left: 3%; overflow: auto; color: white; - text-align: justify; font-size: 20px; } .article_one_image, .article_two_image { @@ -72,4 +63,36 @@ body { .article_one_image:hover, .article_two_image:hover { border-radius: 22px; box-shadow: 0px 0px 30px #ffffff; -} \ No newline at end of file +} +.auth { + width: 28%; + margin-left: 12px; + height: 60px; +} +.user { + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 19px; + border: 2px solid #ffffff; +} +.button { + width: 160px; + height: 50px; + margin-bottom: 30%; + border-radius: 15px; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + transition: border-radius 0.5s ease-in, box-shadow 1s ease-in; +} +.button:hover { + border-radius: 22px; + box-shadow: 0px 0px 30px #ffffff; +} +.btn_text { + margin-top: 7%; + text-align: center; + color: #ffffff; + font-size: 20px; +} +.login { + display: flex; + justify-content: space-evenly; +} diff --git a/static/css/main/register.css b/static/css/main/register.css new file mode 100644 index 0000000..879934a --- /dev/null +++ b/static/css/main/register.css @@ -0,0 +1,43 @@ +.register { + margin-top: 5%; +} +.header_title { + text-align: center; + color: white; + margin-left: 27%; + margin-right: 27%; + width: 46%; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 53; + text-shadow: 0px 0px 20px #ffffff; +} +.register { + width: 60%; + margin-left: 20%; + margin-right: 20%; +} +.register_form { + display: flex; + flex-flow: column wrap; +} +.form_buttons { + margin-top: 10px; + display: flex; + justify-content: space-evenly; +} +.back { + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 19px; + border: 2px solid #ffffff; + width: 10%; + margin-left: 12px; + height: 42px; +} +.back_text { + margin-top: 7%; + text-align: center; +} \ No newline at end of file diff --git a/static/css/safe_app_school/about.css b/static/css/safe_app_school/about.css new file mode 100644 index 0000000..30688e2 --- /dev/null +++ b/static/css/safe_app_school/about.css @@ -0,0 +1,47 @@ +.back { + margin-top: 5%; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 22px; + border: 2px solid #ffffff; + width: 20%; + margin-left: 40%; + height: 8%; + font-size: 1.5vw; +} +.back_text { + margin-top: 4%; + text-align: center; +} +.header_title { + font-size: 2.5vw; + text-align: center; + color: white; + width: auto; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 3vw; + text-shadow: 0px 0px 20px #ffffff; +} +.article { + width 60%; + margin-left: 20%; + margin-right: 20%; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border: 2px solid #ffffff; + border-radius: 22px; +} +.article_text_back { + margin-top: 5%; + margin-right: 5%; + margin-left: 5%; + margin-bottom: 5%; +} +.article_text { + font-size: 1.5vw; + text-align: center; + color: white; + text-align: justify; +} \ No newline at end of file diff --git a/static/css/safe_app_school/base.css b/static/css/safe_app_school/base.css new file mode 100644 index 0000000..314d692 --- /dev/null +++ b/static/css/safe_app_school/base.css @@ -0,0 +1,6 @@ +body { + background-image: url('../../img/big_back_moona.png'); + font-family: 'Comfortaa', sans-serif; + background-color: #f0ffff; + margin-bottom: 200px; +} \ No newline at end of file diff --git a/static/css/safe_app_school/main.css b/static/css/safe_app_school/main.css new file mode 100644 index 0000000..fe3814a --- /dev/null +++ b/static/css/safe_app_school/main.css @@ -0,0 +1,52 @@ +.header { + width: 70%; + margin-left: auto; + margin-right: auto; +} +.header_logo { + width:30%; + margin-left: 35%; + margin-right: 35%; +} +.header_title { + font-size: 2.5vw; + text-align: center; + color: white; + width: auto; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 3vw; + text-shadow: 0px 0px 20px #ffffff; +} +.page { + width: 70%; + margin-left: 15%; + margin-right: 15%; +} +.navigation { + margin-top: 50px; + margin-right: 20%; + margin-left: 20%; + width: 60%; + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + align-content: stretch; +} +.button { + width: 100%; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 10%; + margin-top: 5%; + transition: border-radius 0.5s ease-in, box-shadow 1s ease-in; +} +.button:hover { + border-radius: 15%; + box-shadow: 0px 0px 30px #ffffff; +} +.button_block { + width: 35%; +} \ No newline at end of file diff --git a/static/css/safe_app_school/route.css b/static/css/safe_app_school/route.css new file mode 100644 index 0000000..23ef9f5 --- /dev/null +++ b/static/css/safe_app_school/route.css @@ -0,0 +1,46 @@ +.back { + margin-top: 5%; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 22px; + border: 2px solid #ffffff; + width: 20%; + margin-left: 40%; + height: 8%; + font-size: 1.5vw; +} +.back_text { + margin-top: 4%; + text-align: center; +} +.page { + width: 70%; + margin-left: 15%; + margin-right: 15%; +} +.header_title { + font-size: 2.5vw; + text-align: center; + color: white; + width: auto; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 3vw; + text-shadow: 0px 0px 20px #ffffff; +} +.header_button { + margin-top: 10px; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 19px; + border: 2px solid #ffffff; + width: 40%; + margin-left: 30%; + margin-right: 30%; + height: 10%; +} +.header_button_text { + text-align: center; + color: #ffffff; +} \ No newline at end of file diff --git a/static/css/safe_app_school/setting.css b/static/css/safe_app_school/setting.css new file mode 100644 index 0000000..520c778 --- /dev/null +++ b/static/css/safe_app_school/setting.css @@ -0,0 +1,43 @@ +.page { + width: 70%; + margin-left: 15%; + margin-right: 15%; +} +.header_title { + font-size: 2.5vw; + text-align: center; + color: white; + width: auto; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 3vw; + text-shadow: 0px 0px 20px #ffffff; +} +form { + width: 80%; + margin-left: 20%; +} +.button_form { + margin-top: 10px; +} +.form_label { + color: #ffffff; + font-size: 2vw; +} +.back { + margin-top: 5%; + background: linear-gradient(45deg, #d1c3fc, #9bc4fc); + border-radius: 22px; + border: 2px solid #ffffff; + width: 20%; + margin-left: 40%; + height: 8%; + font-size: 1.5vw; +} +.back_text { + margin-top: 4%; + text-align: center; +} \ No newline at end of file diff --git a/static/css/simple/login.css b/static/css/simple/login.css new file mode 100644 index 0000000..4b638be --- /dev/null +++ b/static/css/simple/login.css @@ -0,0 +1,37 @@ +body { + font-family: 'Comfortaa', sans-serif; + background-color: #f0ffff; +} +.header_title { + text-align: center; + margin-left: 27%; + margin-right: 27%; + width: 46%; + height: auto; + margin-top: 15px; + transition: font-size 0.5s ease-in, text-shadow 1s ease-in; +} +.header_title:hover { + font-size: 53; + text-shadow: 0px 0px 20px #ffffff; +} +.login { + width: 60%; + margin-left: 30%; + margin-right: 20%; + display: flex; + flex-flow: row nowrap; +} +form { + width: 80%; + margin-left: 20%; +} +.buttons_from { + display: flex; + justify-content: center; + align-items: center; +} +.button { + margin-left: 5px; + margin-top: 5px; +} \ No newline at end of file diff --git a/static/img/MoonCcircl1.png b/static/img/MoonCcircl1.png deleted file mode 100644 index 2e1ab85..0000000 Binary files a/static/img/MoonCcircl1.png and /dev/null differ diff --git a/static/img/big_back_moona.png b/static/img/big_back_moona.png index 510ba87..3e7fe19 100644 Binary files a/static/img/big_back_moona.png and b/static/img/big_back_moona.png differ diff --git a/static/img/home.png b/static/img/home.png new file mode 100644 index 0000000..e850015 Binary files /dev/null and b/static/img/home.png differ diff --git a/static/img/info.png b/static/img/info.png new file mode 100644 index 0000000..211a2cb Binary files /dev/null and b/static/img/info.png differ diff --git a/static/img/maps.ico b/static/img/maps.ico new file mode 100644 index 0000000..07d3111 Binary files /dev/null and b/static/img/maps.ico differ diff --git a/static/img/school.png b/static/img/school.png new file mode 100644 index 0000000..1e26b40 Binary files /dev/null and b/static/img/school.png differ diff --git a/static/img/setting.png b/static/img/setting.png new file mode 100644 index 0000000..0a14a53 Binary files /dev/null and b/static/img/setting.png differ diff --git a/static/img/strong_big_back_moona.png b/static/img/strong_big_back_moona.png new file mode 100644 index 0000000..510ba87 Binary files /dev/null and b/static/img/strong_big_back_moona.png differ diff --git a/static/js/safe_app_school/mapbasics_templates.js b/static/js/safe_app_school/mapbasics_templates.js new file mode 100644 index 0000000..ccf66cb --- /dev/null +++ b/static/js/safe_app_school/mapbasics_templates.js @@ -0,0 +1,51 @@ +function init() { + // Задаём точки мультимаршрута. + var pointA = , + pointB = , + /** + * Создаем мультимаршрут. + * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRoute.xml + */ + multiRoute = new ymaps.multiRouter.MultiRoute({ + referencePoints: [ + pointA, + pointB + ], + params: { + //Тип маршрутизации - пешеходная маршрутизация. + routingMode: 'pedestrian' + } + }, { + // Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком. + boundsAutoApply: true + }); + + // Создаем кнопку. + var changePointsButton = new ymaps.control.Button({ + data: {content: "Поменять местами точки А и В"}, + options: {selectOnClick: false} + }); + + // Объявляем обработчики для кнопки. + changePointsButton.events.add('select', function () { + multiRoute.model.setReferencePoints([pointB, pointA]); + }); + + changePointsButton.events.add('deselect', function () { + multiRoute.model.setReferencePoints([pointA, pointB]); + }); + + // Создаем карту с добавленной на нее кнопкой. + var myMap = new ymaps.Map('map', { + center: [55.739625, 37.54120], + zoom: 12, + controls: [changePointsButton] + }, { + buttonMaxWidth: 300 + }); + + // Добавляем мультимаршрут на карту. + myMap.geoObjects.add(multiRoute); +} + +ymaps.ready(init); \ No newline at end of file diff --git a/templates/diary/login.html b/templates/diary/login.html index 34b97e6..81eb81b 100644 --- a/templates/diary/login.html +++ b/templates/diary/login.html @@ -3,7 +3,7 @@ {% block content %}
-

Авторизация

+

Авторизация

{{ form.hidden_tag() }}
diff --git a/templates/diary/main.html b/templates/diary/main.html index 38e3e5b..938eff4 100644 --- a/templates/diary/main.html +++ b/templates/diary/main.html @@ -46,8 +46,8 @@

Присоединяйся к нам! Регистрируйся или авторизуйся :з

diff --git a/templates/main/base.html b/templates/main/base.html new file mode 100644 index 0000000..f3180fc --- /dev/null +++ b/templates/main/base.html @@ -0,0 +1,27 @@ + + + + + + + + + {{title}} + + + + + +
+ {% block content %}{% endblock %} +
+ + \ No newline at end of file diff --git a/templates/main/confirmation_reg.html b/templates/main/confirmation_reg.html new file mode 100644 index 0000000..2e371ca --- /dev/null +++ b/templates/main/confirmation_reg.html @@ -0,0 +1,31 @@ + +{% extends "main/base.html" %} + +{% block content %} + +
+

Подтверждение почты

+ +
+ {{ form.hidden_tag() }} + {{ form.csrf_token }} +

Мы отправили секретный код вам на почту

+

+ {{ form.code_key.label }}
+ {{ form.code_key(class="form-control") }}
+ {% for error in form.code_key.errors %} +

+ {% endfor %} +

+

{{ form.submit(type="submit", class="btn btn-primary form_buttons") }}

+ {% if message != '' %} + + {% endif %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/templates/main/login.html b/templates/main/login.html new file mode 100644 index 0000000..87b6937 --- /dev/null +++ b/templates/main/login.html @@ -0,0 +1,52 @@ + +{% extends "main/base.html" %} + +{% block content %} + + +{% endblock %} \ No newline at end of file diff --git a/templates/main/main.html b/templates/main/main.html index 9d9d667..ba5498d 100644 --- a/templates/main/main.html +++ b/templates/main/main.html @@ -1,23 +1,28 @@ - - - - - - - - - Добро пожаловать - - - -