diff --git a/data/__all_models.py b/data/__all_models.py index caeaf62..98e8bea 100644 --- a/data/__all_models.py +++ b/data/__all_models.py @@ -1 +1 @@ -from . import users, diary_post \ No newline at end of file +from . import users, diary_post, questions, answer_quest \ No newline at end of file diff --git a/data/answer_quest.py b/data/answer_quest.py new file mode 100644 index 0000000..f6a318e --- /dev/null +++ b/data/answer_quest.py @@ -0,0 +1,15 @@ +import sqlalchemy +from flask_login import UserMixin + +from .db_session import SqlAlchemyBase + + +class Answer(SqlAlchemyBase, UserMixin): + __tablename__ = 'answer' + + id = sqlalchemy.Column(sqlalchemy.Integer, + primary_key=True, autoincrement=True) + answer = sqlalchemy.Column(sqlalchemy.Text, nullable=True) + user = sqlalchemy.Column(sqlalchemy.Integer, + sqlalchemy.ForeignKey("users.id"), nullable=True) + date = sqlalchemy.Column(sqlalchemy.DateTime, nullable=True) diff --git a/data/questions.py b/data/questions.py new file mode 100644 index 0000000..9d19261 --- /dev/null +++ b/data/questions.py @@ -0,0 +1,12 @@ +import sqlalchemy +from flask_login import UserMixin + +from .db_session import SqlAlchemyBase + + +class Quest(SqlAlchemyBase, UserMixin): + __tablename__ = 'questions' + + id = sqlalchemy.Column(sqlalchemy.Integer, + primary_key=True, autoincrement=True) + quest = sqlalchemy.Column(sqlalchemy.Text, nullable=False) diff --git a/db/moona_data.db b/db/moona_data.db index 5f5e931..8696ad6 100644 Binary files a/db/moona_data.db and b/db/moona_data.db differ diff --git a/forms/add_question.py b/forms/add_question.py new file mode 100644 index 0000000..d883eb0 --- /dev/null +++ b/forms/add_question.py @@ -0,0 +1,8 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, SubmitField +from wtforms.validators import DataRequired + + +class AddQuest(FlaskForm): + quest = StringField('Введите новый вопрос', validators=[DataRequired()]) + submit = SubmitField('Сохранить') diff --git a/forms/post.py b/forms/post.py index 1e3574e..57e8d91 100644 --- a/forms/post.py +++ b/forms/post.py @@ -12,4 +12,4 @@ class AddPost(FlaskForm): pos_emot = TextAreaField('Какие позитивные эмоции вы испытываете?') nig_emot = TextAreaField('Какие негативные эмоции вы испытываете?') link = TextAreaField('Вы можете оставить тут ссылки через пробел') - submit = SubmitField('Добавить') + submit = SubmitField('Сохранить') diff --git a/main.py b/main.py index 2942396..832d895 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,17 @@ import datetime +import os from random import randint -from flask import Flask, render_template +from flask import Flask, render_template, request from flask_login import LoginManager, login_user, logout_user, login_required, current_user +from flask_restful import abort from werkzeug.utils import redirect from data import db_session from data.diary_post import DiaryPost +from data.questions import Quest from data.users import User +from forms.add_question import AddQuest from forms.login import LoginForm from forms.post import AddPost from forms.recovery import RecoveryForm, Conf, Finish @@ -64,6 +68,80 @@ def main_page(): return render_template('base.html', title='moona') +@app.route('/add_question', methods=['GET', 'POST']) +def add_question(): + que = AddQuest() + if que.validate_on_submit(): + session = db_session.create_session() + if que.quest.data in list(map(lambda x: x.quest, session.query(Quest).all())): + return render_template('add_question.html', message='Такой вопрос уже есть!', title='Добавить вопрос', + form=que) + new_que = Quest() + new_que.quest = que.quest.data.strip() + session.add(new_que) + session.commit() + que.quest.data = '' + return render_template('add_question.html', message='', title='Добавить вопрос', form=que) + + +@app.route('/post/', methods=['GET', 'POST']) +def post_edit(id): + global photo + post_ed = AddPost() + if request.method == "GET": + session = db_session.create_session() + post_exc = session.query(DiaryPost).filter(DiaryPost.id == id, + DiaryPost.author == current_user.id).first() + if post_exc: + post_ed.name.data = post_exc.name + post_ed.text.data = post_exc.text + post_ed.public.data = post_exc.public + post_ed.pos_emot.data = post_exc.pos_emot + post_ed.nig_emot.data = post_exc.nig_emot + post_ed.link.data = post_exc.link + if post_exc.photo: + photo = post_exc.photo + else: + photo = None + else: + abort(404) + if post_ed.validate_on_submit(): + session = db_session.create_session() + post_exc = session.query(DiaryPost).filter(DiaryPost.id == id, + DiaryPost.author == current_user.id).first() + if post_exc: + post_exc.name = post_ed.name.data + post_exc.text = post_ed.text.data + post_exc.public = post_ed.public.data + post_exc.pos_emot = post_ed.pos_emot.data + post_exc.nig_emot = post_ed.nig_emot.data + post_exc.link = post_ed.link.data + if post_ed.photo.data: + post_exc.photo = save_photo(post_ed.photo, current_user.login, post=True, id_post=post_exc.id) + else: + post_exc.photo = photo + session.commit() + return redirect('/diary') + else: + abort(404) + return render_template('post.html', form=post_ed, message='', title='Изменить запись') + + +@app.route('/post_deleted/', methods=['GET', 'POST']) +def post_deleted(id): + session = db_session.create_session() + pos = session.query(DiaryPost).filter(DiaryPost.id == id, + DiaryPost.author == current_user.id).first() + if pos: + if pos.photo: + os.remove(pos.photo[3:]) + session.delete(pos) + session.commit() + else: + abort(404) + return redirect('/diary') + + @app.route('/add_post', methods=['GET', 'POST']) def add_post(): pos = AddPost() @@ -99,7 +177,7 @@ def add_post(): session.add(diart_pos) session.commit() return redirect("/diary") - return render_template('post.html', form=pos) + return render_template('post.html', form=pos, title='Новый пост', message='') @app.route('/diary', methods=['GET', 'POST']) @@ -109,7 +187,7 @@ def diary(): posts = db_sess.query(DiaryPost).filter(DiaryPost.author == current_user.id).all() else: posts = None - return render_template('diary.html', title='moona', post=posts) + return render_template('diary.html', title='moona', my_post=posts, message='') @app.route('/logout') diff --git a/static/app_image/post_photo/Duvakin_post_2.png b/static/app_image/post_photo/Duvakin_post_2.png new file mode 100644 index 0000000..ab5bf79 Binary files /dev/null and b/static/app_image/post_photo/Duvakin_post_2.png differ diff --git a/static/css/diary.css b/static/css/diary.css index 1f9b089..eb3be74 100644 --- a/static/css/diary.css +++ b/static/css/diary.css @@ -18,7 +18,7 @@ text-align: center; width: 70%; } #all_my_post { -width: 30%; +width: 35%; margin-left: auto; margin-right: auto; } @@ -45,4 +45,7 @@ margin-left: auto; #add_post { margin-top: 20px; margin-left: 85%; +} +#edit_btn { +background-color: #c5f1ff; } \ No newline at end of file diff --git a/static/img/Икона.png b/static/img/Икона.png new file mode 100644 index 0000000..ddd8fad Binary files /dev/null and b/static/img/Икона.png differ diff --git a/templates/add_question.html b/templates/add_question.html new file mode 100644 index 0000000..d82bfb4 --- /dev/null +++ b/templates/add_question.html @@ -0,0 +1,35 @@ + +{% extends "base.html" %} + +{% block content %} +{% if current_user.is_authenticated and (current_user.role == 'admin' or current_user.role == 'moder') %} +
+

Введите новый вопрос

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

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

+ {% endfor %} +

+

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

+ {% if message != '' %} + + {% endif %} +
+
+{% else %} +
+
+

У вас нет прав доступа!

+

Эта страница предназначена только для руководства сайта!

+

+
+
+{% endif %} +{% endblock %} \ No newline at end of file diff --git a/templates/diary.html b/templates/diary.html index bbd26bc..9cbccd0 100644 --- a/templates/diary.html +++ b/templates/diary.html @@ -6,9 +6,9 @@
Добавить запись -

Мои записи

-
- {% for item in post %} +

Мои мысли

+
+ {% for item in my_post %}
{% if item.name != None %}

{{item.name}}

@@ -38,9 +38,11 @@
{% endif %} {% if item.photo != None %} +

- +
+

{% endif %} {% if item.link != None %} {% for item2 in item.link %} @@ -60,6 +62,14 @@ {{ current_user.name }}
{{item.date}} +
+ + Изменить + + + Удалить + +
{% endfor %}