Добавлена возможность, удалять, изменять и добавлять посты, а также возможность добавлять новые вопросы дня в базу данных

This commit is contained in:
mrmur 2022-04-07 16:20:41 +05:00
parent af3c59f92e
commit 5a915fcf88
12 changed files with 171 additions and 10 deletions

View File

@ -1 +1 @@
from . import users, diary_post
from . import users, diary_post, questions, answer_quest

15
data/answer_quest.py Normal file
View File

@ -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)

12
data/questions.py Normal file
View File

@ -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)

Binary file not shown.

8
forms/add_question.py Normal file
View File

@ -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('Сохранить')

View File

@ -12,4 +12,4 @@ class AddPost(FlaskForm):
pos_emot = TextAreaField('Какие позитивные эмоции вы испытываете?')
nig_emot = TextAreaField('Какие негативные эмоции вы испытываете?')
link = TextAreaField('Вы можете оставить тут ссылки через пробел')
submit = SubmitField('Добавить')
submit = SubmitField('Сохранить')

84
main.py
View File

@ -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/<int:id>', 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/<int:id>', 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')

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

View File

@ -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;
}

BIN
static/img/Икона.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,35 @@
<link rel="stylesheet" href="../static/css/diary.css">
{% extends "base.html" %}
{% block content %}
{% if current_user.is_authenticated and (current_user.role == 'admin' or current_user.role == 'moder') %}
<div>
<h1>Введите новый вопрос</h1>
<form action="" method="POST" enctype="multipart/form-data">
{{ form.hidden_tag() }}
{{ form.csrf_token }}
<p>
{{ form.quest.label }}<br>
{{ form.quest(class="form-control") }}<br>
{% for error in form.quest.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>{{ form.submit(type="submit", class="btn btn-primary") }}</p>
{% if message != '' %}
<div class="alert alert-danger" role="alert">{{ message }}</div>
{% endif %}
</form>
</div>
{% else %}
<div class="bad_user">
<div class="bad_centre">
<h1 id="hz1">У вас нет прав доступа!</h1>
<h2 id="hz2">Эта страница предназначена только для руководства сайта!</h2>
<p></p>
<img id="image" src="../static/img/Надпись Moona без фона.png"></div>
</div>
{% endif %}
{% endblock %}

View File

@ -6,9 +6,9 @@
<div>
<a href="/add_post" id="add_post" class="btn btn-primary" style="background-color:#1daff0"><strong>Добавить
запись</strong></a>
</div><h1 class="my_post_zag">Мои записи</h1>
<div class="card" style="width: 18rem;" id="all_my_post">
{% for item in post %}
</div><h1 class="my_post_zag">Мои мысли</h1>
<div id="all_my_post">
{% for item in my_post %}
<div class="card-body" id="my_post">
{% if item.name != None %}
<h2 class="card-title" id="my_post_zag" style="color:#c5f1ff">{{item.name}}</h2>
@ -38,9 +38,11 @@
</div>
{% endif %}
{% if item.photo != None %}
<p></p>
<div class="photo">
<img width="100" height="100" src="{{ item.photo }}">
<img width="90%" src="{{ item.photo }}">
</div>
<p></p>
{% endif %}
{% if item.link != None %}
{% for item2 in item.link %}
@ -60,6 +62,14 @@
<strong style="color: #ffffff">{{ current_user.name }}</strong>
</div>
<strong style="color:#ffffff">{{item.date}}</strong>
<div>
<a href="/post/{{ item.id }}" class="btn" id="edit_btn">
Изменить
</a>
<a href="/post_deleted/{{ item.id }}" class="btn btn-danger">
Удалить
</a>
</div>
</div>
{% endfor %}
</div>