Добавлена возможность, удалять, изменять и добавлять посты, а также возможность добавлять новые вопросы дня в базу данных
This commit is contained in:
parent
af3c59f92e
commit
5a915fcf88
@ -1 +1 @@
|
||||
from . import users, diary_post
|
||||
from . import users, diary_post, questions, answer_quest
|
||||
15
data/answer_quest.py
Normal file
15
data/answer_quest.py
Normal 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
12
data/questions.py
Normal 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)
|
||||
BIN
db/moona_data.db
BIN
db/moona_data.db
Binary file not shown.
8
forms/add_question.py
Normal file
8
forms/add_question.py
Normal 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('Сохранить')
|
||||
@ -12,4 +12,4 @@ class AddPost(FlaskForm):
|
||||
pos_emot = TextAreaField('Какие позитивные эмоции вы испытываете?')
|
||||
nig_emot = TextAreaField('Какие негативные эмоции вы испытываете?')
|
||||
link = TextAreaField('Вы можете оставить тут ссылки через пробел')
|
||||
submit = SubmitField('Добавить')
|
||||
submit = SubmitField('Сохранить')
|
||||
|
||||
84
main.py
84
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/<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')
|
||||
|
||||
BIN
static/app_image/post_photo/Duvakin_post_2.png
Normal file
BIN
static/app_image/post_photo/Duvakin_post_2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 MiB |
@ -18,7 +18,7 @@ text-align: center;
|
||||
width: 70%;
|
||||
}
|
||||
#all_my_post {
|
||||
width: 30%;
|
||||
width: 35%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
@ -46,3 +46,6 @@ margin-left: auto;
|
||||
margin-top: 20px;
|
||||
margin-left: 85%;
|
||||
}
|
||||
#edit_btn {
|
||||
background-color: #c5f1ff;
|
||||
}
|
||||
BIN
static/img/Икона.png
Normal file
BIN
static/img/Икона.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
35
templates/add_question.html
Normal file
35
templates/add_question.html
Normal 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 %}
|
||||
@ -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>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user