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

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('Какие позитивные эмоции вы испытываете?') pos_emot = TextAreaField('Какие позитивные эмоции вы испытываете?')
nig_emot = TextAreaField('Какие негативные эмоции вы испытываете?') nig_emot = TextAreaField('Какие негативные эмоции вы испытываете?')
link = TextAreaField('Вы можете оставить тут ссылки через пробел') link = TextAreaField('Вы можете оставить тут ссылки через пробел')
submit = SubmitField('Добавить') submit = SubmitField('Сохранить')

84
main.py
View File

@ -1,13 +1,17 @@
import datetime import datetime
import os
from random import randint 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_login import LoginManager, login_user, logout_user, login_required, current_user
from flask_restful import abort
from werkzeug.utils import redirect from werkzeug.utils import redirect
from data import db_session from data import db_session
from data.diary_post import DiaryPost from data.diary_post import DiaryPost
from data.questions import Quest
from data.users import User from data.users import User
from forms.add_question import AddQuest
from forms.login import LoginForm from forms.login import LoginForm
from forms.post import AddPost from forms.post import AddPost
from forms.recovery import RecoveryForm, Conf, Finish from forms.recovery import RecoveryForm, Conf, Finish
@ -64,6 +68,80 @@ def main_page():
return render_template('base.html', title='moona') 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']) @app.route('/add_post', methods=['GET', 'POST'])
def add_post(): def add_post():
pos = AddPost() pos = AddPost()
@ -99,7 +177,7 @@ def add_post():
session.add(diart_pos) session.add(diart_pos)
session.commit() session.commit()
return redirect("/diary") 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']) @app.route('/diary', methods=['GET', 'POST'])
@ -109,7 +187,7 @@ def diary():
posts = db_sess.query(DiaryPost).filter(DiaryPost.author == current_user.id).all() posts = db_sess.query(DiaryPost).filter(DiaryPost.author == current_user.id).all()
else: else:
posts = None 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') @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%; width: 70%;
} }
#all_my_post { #all_my_post {
width: 30%; width: 35%;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
@ -45,4 +45,7 @@ margin-left: auto;
#add_post { #add_post {
margin-top: 20px; margin-top: 20px;
margin-left: 85%; 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> <div>
<a href="/add_post" id="add_post" class="btn btn-primary" style="background-color:#1daff0"><strong>Добавить <a href="/add_post" id="add_post" class="btn btn-primary" style="background-color:#1daff0"><strong>Добавить
запись</strong></a> запись</strong></a>
</div><h1 class="my_post_zag">Мои записи</h1> </div><h1 class="my_post_zag">Мои мысли</h1>
<div class="card" style="width: 18rem;" id="all_my_post"> <div id="all_my_post">
{% for item in post %} {% for item in my_post %}
<div class="card-body" id="my_post"> <div class="card-body" id="my_post">
{% if item.name != None %} {% if item.name != None %}
<h2 class="card-title" id="my_post_zag" style="color:#c5f1ff">{{item.name}}</h2> <h2 class="card-title" id="my_post_zag" style="color:#c5f1ff">{{item.name}}</h2>
@ -38,9 +38,11 @@
</div> </div>
{% endif %} {% endif %}
{% if item.photo != None %} {% if item.photo != None %}
<p></p>
<div class="photo"> <div class="photo">
<img width="100" height="100" src="{{ item.photo }}"> <img width="90%" src="{{ item.photo }}">
</div> </div>
<p></p>
{% endif %} {% endif %}
{% if item.link != None %} {% if item.link != None %}
{% for item2 in item.link %} {% for item2 in item.link %}
@ -60,6 +62,14 @@
<strong style="color: #ffffff">{{ current_user.name }}</strong> <strong style="color: #ffffff">{{ current_user.name }}</strong>
</div> </div>
<strong style="color:#ffffff">{{item.date}}</strong> <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> </div>
{% endfor %} {% endfor %}
</div> </div>