Исправлено много ошибок

This commit is contained in:
mrmur 2022-05-01 14:21:15 +05:00
parent aa65ac0cda
commit 5cf1bf9fde
4 changed files with 361 additions and 303 deletions

Binary file not shown.

0
main.log Normal file
View File

664
main.py
View File

@ -167,125 +167,136 @@ def main_page():
@app.route('/edit_profile/<string:logins>', methods=['GET', 'POST']) @app.route('/edit_profile/<string:logins>', methods=['GET', 'POST'])
def edit_profile(logins): def edit_profile(logins):
global photo if current_user.is_authenticated:
global help_arg global photo
global help_arg_2 global help_arg
form = RegisterForm() global help_arg_2
session = db_session.create_session() form = RegisterForm()
ph_f = False session = db_session.create_session()
if current_user.photo != '../static/img/None_logo.png': ph_f = False
photo = current_user.photo if current_user.photo != '../static/img/None_logo.png':
ph_f = True photo = current_user.photo
else: ph_f = True
photo = None
if form.del_photo.data:
help_arg = photo
photo = '../static/img/None_logo.png'
if form.submit2.data:
user = session.query(User).filter(User.login == logins).first()
if user.email != form.email.data:
if session.query(User).filter(User.email == form.email.data).first():
return render_template('edit_profile.html', title='Редактирование профиля', form=form,
ph_f=ph_f,
message="Такая почта уже есть")
user.name = form.name.data
user.surname = form.surname.data
user.age = form.age.data
user.about = form.about.data
if not ph_f and form.photo.data:
photo = save_photo(form.photo.data, logins)
if help_arg:
os.remove(help_arg)
help_arg = False
user.photo = photo
session.commit()
if user.email == form.email.data:
return redirect('/profile')
else: else:
help_arg_2 = form.email.data photo = None
return redirect('/confirmation') if form.del_photo.data:
if request.method == "GET": help_arg = photo
if current_user.login == logins: photo = '../static/img/None_logo.png'
form.email.data = current_user.email if form.submit2.data:
form.name.data = current_user.name user = session.query(User).filter(User.login == logins).first()
form.surname.data = current_user.surname if user.email != form.email.data:
form.login.data = logins if session.query(User).filter(User.email == form.email.data).first():
form.age.data = current_user.age return render_template('edit_profile.html', title='Редактирование профиля', form=form,
form.about.data = current_user.about ph_f=ph_f,
form.password.data = None message="Такая почта уже есть")
form.password2.data = None user.name = form.name.data
return render_template('edit_profile.html', title='Редактирование профиля', form=form, message='', ph_f=ph_f) user.surname = form.surname.data
user.age = form.age.data
user.about = form.about.data
if not ph_f and form.photo.data:
photo = save_photo(form.photo.data, logins)
if help_arg:
os.remove(help_arg)
help_arg = False
user.photo = photo
session.commit()
if user.email == form.email.data:
return redirect('/profile')
else:
help_arg_2 = form.email.data
help_arg = True
return redirect('/confirmation')
if request.method == "GET":
if current_user.login == logins:
form.email.data = current_user.email
form.name.data = current_user.name
form.surname.data = current_user.surname
form.login.data = logins
form.age.data = current_user.age
form.about.data = current_user.about
form.password.data = None
form.password2.data = None
return render_template('edit_profile.html', title='Редактирование профиля', form=form, message='', ph_f=ph_f)
else:
return redirect('/login')
@app.route('/profile') @app.route('/profile')
def profile(): def profile():
global help_arg_2 if current_user.is_authenticated:
db_sess = db_session.create_session() global help_arg_2
pub_post = db_sess.query(DiaryPost).filter(DiaryPost.author == current_user.id, DiaryPost.public == 1).all() db_sess = db_session.create_session()
pub_post = pub_post[::-1] pub_post = db_sess.query(DiaryPost).filter(DiaryPost.author == current_user.id, DiaryPost.public == 1).all()
emotion_pub = [] pub_post = pub_post[::-1]
for i in pub_post: emotion_pub = []
emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [], 'like': None, 'is_like': 0, for i in pub_post:
'author': current_user} emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [], 'like': None, 'is_like': 0,
if i.pos_emot: 'author': current_user}
emotion['pos_emot'] = i.pos_emot.split() if i.pos_emot:
else: emotion['pos_emot'] = i.pos_emot.split()
emotion['pos_emot'] = None else:
if i.nig_emot: emotion['pos_emot'] = None
emotion['nig_emot'] = i.nig_emot.split() if i.nig_emot:
else: emotion['nig_emot'] = i.nig_emot.split()
emotion['nig_emot'] = None else:
if i.link: emotion['nig_emot'] = None
emotion['link'] = i.link.split() if i.link:
else: emotion['link'] = i.link.split()
emotion['link'] = None else:
like = db_sess.query(Like).filter(Like.post == i.id).all() emotion['link'] = None
if like: like = db_sess.query(Like).filter(Like.post == i.id).all()
emotion['like'] = len(like) if like:
if db_sess.query(Like).filter(Like.post == i.id, Like.user == current_user.id).first(): emotion['like'] = len(like)
emotion['is_like'] = 1 if db_sess.query(Like).filter(Like.post == i.id, Like.user == current_user.id).first():
emotion_pub.append(emotion) emotion['is_like'] = 1
message = 'Ваша почта успешно изменена!' if help_arg_2 == 'EditEmail' else '' emotion_pub.append(emotion)
return render_template('profile.html', title='Профиль', pub_post=pub_post, emotion_pub=emotion_pub, message=message) message = 'Ваша почта успешно изменена!' if help_arg_2 == 'EditEmail' else ''
return render_template('profile.html', title='Профиль', pub_post=pub_post, emotion_pub=emotion_pub,
message=message)
else:
return redirect('/login')
@app.route('/new_like/<int:user_id>/<int:post_id>/<string:ret_href>') @app.route('/new_like/<int:user_id>/<int:post_id>/<string:ret_href>')
def new_like(user_id, post_id, ret_href): def new_like(user_id, post_id, ret_href):
session = db_session.create_session() if current_user.is_authenticated:
find = session.query(Like).filter(Like.post == post_id, Like.user == user_id).first() session = db_session.create_session()
if find: find = session.query(Like).filter(Like.post == post_id, Like.user == user_id).first()
if (find.date - datetime.datetime.now()).days <= 30: if find:
pop = session.query(Popularity).filter(Popularity.post == post_id).first() if (find.date - datetime.datetime.now()).days <= 30:
pop.popularity = 10 * sum(1 if (i.date - datetime.datetime.now()).days <= 30 else 0 for i in pop = session.query(Popularity).filter(Popularity.post == post_id).first()
session.query(Like).filter(Like.post == post_id).all()) - 10 pop.popularity = 10 * sum(1 if (i.date - datetime.datetime.now()).days <= 30 else 0 for i in
if not pop.popularity: session.query(Like).filter(Like.post == post_id).all()) - 10
session.delete(pop) if not pop.popularity:
session.delete(find) session.delete(pop)
session.commit() session.delete(find)
if ret_href != 'main': session.commit()
return redirect(f"/{ret_href}") if ret_href != 'main':
return redirect(f"/{ret_href}")
else:
return redirect('/')
else: else:
return redirect('/') popular = session.query(Popularity).filter(Popularity.post == post_id).first()
if not popular:
pop = Popularity()
pop.post = post_id
pop.popularity = 10
pop.edit_date = datetime.datetime.now()
session.add(pop)
else:
popular.popularity += 10
like = Like()
like.user = user_id
like.post = post_id
like.date = datetime.datetime.now()
session.add(like)
session.commit()
if ret_href != 'main':
return redirect(f"/{ret_href}")
else:
return redirect('/')
else: else:
popular = session.query(Popularity).filter(Popularity.post == post_id).first() return redirect('/')
if not popular:
pop = Popularity()
pop.post = post_id
pop.popularity = 10
pop.edit_date = datetime.datetime.now()
session.add(pop)
else:
popular.popularity += 10
like = Like()
like.user = user_id
like.post = post_id
like.date = datetime.datetime.now()
session.add(like)
session.commit()
if ret_href != 'main':
return redirect(f"/{ret_href}")
else:
return redirect('/')
@app.route('/publications', methods=['GET', 'POST']) @app.route('/publications', methods=['GET', 'POST'])
@ -333,11 +344,14 @@ def publications():
if pop: if pop:
if len(pop) > 50: if len(pop) > 50:
pop = pop[:50] pop = pop[:50]
pop_post = [session.query(DiaryPost).filter(DiaryPost.public == 1, DiaryPost.id == i.post).first() for i in pop] pop_post = list(
map(lambda x: session.query(DiaryPost).filter(DiaryPost.public == 1, DiaryPost.id == x.post).first(), pop))
emotion_pop = [] emotion_pop = []
for i in pop_post: for i in pop_post:
logging.warning(f'{datetime.datetime.now()}:{i} - i_pop_post')
emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [], emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [],
'author': session.query(User).filter(User.id == i.author).first(), 'like': None, 'is_like': 0} 'author': session.query(User).filter(User.id == i.author).first(), 'like': None,
'is_like': 0}
if i.pos_emot: if i.pos_emot:
emotion['pos_emot'] = i.pos_emot.split() emotion['pos_emot'] = i.pos_emot.split()
else: else:
@ -396,168 +410,206 @@ def publications():
@app.route('/answer_quest/<int:id>', methods=['GET', 'POST']) @app.route('/answer_quest/<int:id>', methods=['GET', 'POST'])
def answer_quest(id): def answer_quest(id):
session = db_session.create_session() if current_user.is_authenticated:
answer = AnswerQuest() session = db_session.create_session()
quest = session.query(Quest).filter(Quest.id == id).first() answer = AnswerQuest()
if request.method == 'GET': quest = session.query(Quest).filter(Quest.id == id).first()
if session.query(Answer).filter(Answer.id_question == id).first(): if request.method == 'GET':
ans_quest = session.query(Answer).filter(Answer.id_question == id).first() if session.query(Answer).filter(Answer.id_question == id).first():
answer.answer.data = ans_quest.answer ans_quest = session.query(Answer).filter(Answer.id_question == id).first()
if answer.validate_on_submit(): answer.answer.data = ans_quest.answer
if not session.query(Answer).filter(Answer.id_question == id).first(): if answer.validate_on_submit():
answer_user = Answer(id_question=id, if not session.query(Answer).filter(Answer.id_question == id).first():
answer=answer.answer.data, answer_user = Answer(id_question=id,
user=current_user.id, answer=answer.answer.data,
date=datetime.date.today()) user=current_user.id,
quest.one_used = True date=datetime.date.today())
if len(session.query(Answer).filter(Answer.id_question == id).all()) == len(session.query(User).all()): quest.one_used = True
quest.all_used = True if len(session.query(Answer).filter(Answer.id_question == id).all()) == len(session.query(User).all()):
session.add(answer_user) quest.all_used = True
session.commit() session.add(answer_user)
return redirect('/diary') session.commit()
else: return redirect('/diary')
ans_quest = session.query(Answer).filter(Answer.id_question == id).first() else:
ans_quest.answer = answer.answer.data ans_quest = session.query(Answer).filter(Answer.id_question == id).first()
session.commit() ans_quest.answer = answer.answer.data
return redirect('/diary') session.commit()
return render_template('answer_quest.html', tetle='Ответ на вопрос', form=answer, message='', quest=quest) return redirect('/diary')
return render_template('answer_quest.html', tetle='Ответ на вопрос', form=answer, message='', quest=quest)
else:
return redirect('/')
@app.route('/delete_quest/<int:id>', methods=['GET', 'POST']) @app.route('/delete_quest/<int:id>', methods=['GET', 'POST'])
def delete_quest(id): def delete_quest(id):
session = db_session.create_session() if current_user.is_authenticated:
pos = session.query(Quest).filter(Quest.id == id).first() session = db_session.create_session()
if pos: pos = session.query(Quest).filter(Quest.id == id).first()
session.delete(pos) if pos:
session.commit() session.delete(pos)
session.commit()
else:
abort(404)
return redirect('/add_question')
else: else:
abort(404) return redirect('/')
return redirect('/add_question')
@app.route('/add_question', methods=['GET', 'POST']) @app.route('/add_question', methods=['GET', 'POST'])
def add_question(): def add_question():
que = AddQuest() if current_user.is_authenticated:
session = db_session.create_session() 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())): if que.validate_on_submit():
return render_template('add_question.html', message='Такой вопрос уже есть!', title='Добавить вопрос', if que.quest.data in list(map(lambda x: x.quest, session.query(Quest).all())):
form=que) return render_template('add_question.html', message='Такой вопрос уже есть!', title='Добавить вопрос',
new_que = Quest() form=que)
new_que.quest = que.quest.data.strip() new_que = Quest()
session.add(new_que) new_que.quest = que.quest.data.strip()
session.commit() session.add(new_que)
que.quest.data = '' session.commit()
return render_template('add_question.html', message='', title='Добавить вопрос', form=que, que.quest.data = ''
question=session.query(Quest).all()) return render_template('add_question.html', message='', title='Добавить вопрос', form=que,
question=session.query(Quest).all())
else:
return redirect('/')
@app.route('/post/<int:id>', methods=['GET', 'POST']) @app.route('/post/<int:id>', methods=['GET', 'POST'])
def post_edit(id): def post_edit(id):
global photo if current_user.is_authenticated:
global help_arg
post_ed = AddPost()
ph_f = False
if post_ed.del_photo.data:
help_arg = photo
photo = None
if request.method == "GET":
session = db_session.create_session() session = db_session.create_session()
post_exc = session.query(DiaryPost).filter(DiaryPost.id == id, find_post = session.query(DiaryPost).filter(DiaryPost.id == id).first()
DiaryPost.author == current_user.id).first() if find_post:
if post_exc: if find_post.author == current_user.id:
post_ed.name.data = post_exc.name global photo
post_ed.text.data = post_exc.text global help_arg
post_ed.public.data = post_exc.public post_ed = AddPost()
post_ed.pos_emot.data = post_exc.pos_emot ph_f = False
post_ed.nig_emot.data = post_exc.nig_emot if post_ed.del_photo.data:
post_ed.link.data = post_exc.link help_arg = photo
if post_exc.photo: photo = None
photo = post_exc.photo if request.method == "GET":
ph_f = True 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
ph_f = True
else:
photo = None
else:
abort(404)
if post_ed.validate_on_submit() and not post_ed.del_photo.data:
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 help_arg:
os.remove(help_arg[3:])
help_arg = False
if post_ed.photo.data:
post_exc.photo = save_photo(post_ed.photo.data, current_user.login, post=True,
id_post=post_exc.id)
else:
post_exc.photo = photo
check_pop = session.query(Popularity).filter(Popularity.post == post_exc.id).first()
if post_ed.public.data and check_pop:
session.delete(check_pop)
session.commit()
return redirect('/diary')
else:
abort(404)
return render_template('post.html', form=post_ed, message='', title='Изменить запись', pht=ph_f)
else: else:
photo = None return redirect('/diary')
else: else:
abort(404)
if post_ed.validate_on_submit() and not post_ed.del_photo.data:
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 help_arg:
os.remove(help_arg[3:])
help_arg = False
if post_ed.photo.data:
post_exc.photo = save_photo(post_ed.photo.data, current_user.login, post=True, id_post=post_exc.id)
else:
post_exc.photo = photo
session.commit()
return redirect('/diary') return redirect('/diary')
else: else:
abort(404) return redirect('/login')
return render_template('post.html', form=post_ed, message='', title='Изменить запись', pht=ph_f)
@app.route('/post_deleted/<int:id>', methods=['GET', 'POST']) @app.route('/post_deleted/<int:id>', methods=['GET', 'POST'])
def post_deleted(id): def post_deleted(id):
session = db_session.create_session() if current_user.is_authenticated:
pos = session.query(DiaryPost).filter(DiaryPost.id == id, session = db_session.create_session()
DiaryPost.author == current_user.id).first() find_post = session.query(DiaryPost).filter(DiaryPost.id == id).first()
if pos: if find_post:
if pos.photo: if find_post.author == current_user.id:
os.remove(pos.photo[3:]) session = db_session.create_session()
session.delete(pos) pos = session.query(DiaryPost).filter(DiaryPost.id == id,
session.commit() 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')
else:
return redirect('/diary')
else:
return redirect('/diary')
else: else:
abort(404) return redirect('/login')
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() if current_user.is_authenticated:
session = db_session.create_session() pos = AddPost()
if pos.validate_on_submit(): session = db_session.create_session()
try: if pos.validate_on_submit():
id = session.query(DiaryPost).order_by(DiaryPost.id)[-1].id try:
if id: id = session.query(DiaryPost).order_by(DiaryPost.id)[-1].id
id += 1 if id:
else: id += 1
else:
id = -1
except Exception:
id = -1 id = -1
except Exception: if pos.photo.data:
id = -1 diart_pos = DiaryPost(name=pos.name.data,
if pos.photo.data: text=pos.text.data,
diart_pos = DiaryPost(name=pos.name.data, author=current_user.id,
text=pos.text.data, date=datetime.datetime.now(),
author=current_user.id, photo=save_photo(pos.photo.data, current_user.login, post=True, id_post=id),
date=datetime.datetime.now(), public=pos.public.data,
photo=save_photo(pos.photo.data, current_user.login, post=True, id_post=id), pos_emot=pos.pos_emot.data,
public=pos.public.data, nig_emot=pos.nig_emot.data,
pos_emot=pos.pos_emot.data, link=pos.link.data)
nig_emot=pos.nig_emot.data, session.add(diart_pos)
link=pos.link.data) session.commit()
session.add(diart_pos) return redirect("/diary")
session.commit() else:
return redirect("/diary") diart_pos = DiaryPost(name=pos.name.data,
else: text=pos.text.data,
diart_pos = DiaryPost(name=pos.name.data, author=current_user.id,
text=pos.text.data, date=datetime.datetime.now(),
author=current_user.id, public=pos.public.data,
date=datetime.datetime.now(), pos_emot=pos.pos_emot.data,
public=pos.public.data, nig_emot=pos.nig_emot.data,
pos_emot=pos.pos_emot.data, link=pos.link.data)
nig_emot=pos.nig_emot.data, session.add(diart_pos)
link=pos.link.data) session.commit()
session.add(diart_pos) return redirect("/diary")
session.commit() return render_template('post.html', form=pos, title='Новый пост', message='')
return redirect("/diary") else:
return render_template('post.html', form=pos, title='Новый пост', message='') return redirect('/login')
@app.route('/diary', methods=['GET', 'POST']) @app.route('/diary', methods=['GET', 'POST'])
@ -663,66 +715,71 @@ def login():
@app.route('/confirmation', methods=['GET', 'POST']) @app.route('/confirmation', methods=['GET', 'POST'])
def confirmation(): def confirmation():
global help_arg global help_arg
global send_msg if help_arg:
global secret_code global send_msg
global photo global secret_code
global help_arg_2 global photo
session = db_session.create_session() global help_arg_2
if not help_arg_2: session = db_session.create_session()
form = help_arg if not help_arg_2:
if not send_msg: form = help_arg
secret_code = secret_key() if not send_msg:
mail(f'Ваш секретный код: {secret_code}', form.email.data, 'Moona Код') secret_code = secret_key()
send_msg = True mail(f'Ваш секретный код: {secret_code}', form.email.data, 'Moona Код')
conf = Confirmation() send_msg = True
if conf.validate_on_submit(): conf = Confirmation()
if str(conf.code_key.data).strip() == str(secret_code).strip(): if conf.validate_on_submit():
if form.photo.data: if str(conf.code_key.data).strip() == str(secret_code).strip():
user = User( if form.photo.data:
name=form.name.data, user = User(
surname=form.surname.data, name=form.name.data,
login=form.login.data, surname=form.surname.data,
age=form.age.data, login=form.login.data,
about=form.about.data, age=form.age.data,
email=form.email.data, about=form.about.data,
photo=photo, email=form.email.data,
role='user' photo=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/Икона.png'
)
user.set_password(form.password.data)
session.add(user)
session.commit()
send_msg = False
help_arg = False
return redirect('/login')
else: else:
user = User( return render_template('confirmation_reg.html', title='Подтверждение', form=conf,
name=form.name.data, message='Коды не совпадают')
surname=form.surname.data, return render_template('confirmation_reg.html', title='Подтверждение', form=conf, message='')
login=form.login.data, else:
age=form.age.data, conf = Confirmation()
about=form.about.data, if not send_msg:
email=form.email.data, secret_code = secret_key()
role='user', mail(f'Ваш секретный код: {secret_code}', help_arg_2, 'Moona Код')
photo='../static/img/Икона.png' send_msg = True
) if conf.validate_on_submit():
user.set_password(form.password.data) if str(conf.code_key.data).strip() == str(secret_code).strip():
session.add(user) user = session.query(User).filter(User.id == current_user.id).first()
session.commit() user.email = help_arg_2
send_msg = False help_arg_2 = 'EditEmail'
return redirect('/login') session.commit()
else: send_msg = False
return render_template('confirmation_reg.html', title='Подтверждение', form=conf, help_arg = False
message='Коды не совпадают') return redirect('/profile')
return render_template('confirmation_reg.html', title='Подтверждение', form=conf, message='') return render_template('confirmation_reg.html', title='Подтверждение', form=conf, message='')
else: else:
conf = Confirmation() return redirect('/')
if not send_msg:
secret_code = secret_key()
mail(f'Ваш секретный код: {secret_code}', help_arg_2, 'Moona Код')
send_msg = True
if conf.validate_on_submit():
if str(conf.code_key.data).strip() == str(secret_code).strip():
user = session.query(User).filter(User.id == current_user.id).first()
user.email = help_arg_2
help_arg_2 = 'EditEmail'
session.commit()
send_msg = False
return redirect('/profile')
return render_template('confirmation_reg.html', title='Подтверждение', form=conf, message='')
@app.route('/register', methods=['GET', 'POST']) @app.route('/register', methods=['GET', 'POST'])
@ -796,6 +853,7 @@ def main():
serve(app, host='0.0.0.0', port=5000) serve(app, host='0.0.0.0', port=5000)
except Exception as error: except Exception as error:
logging.warning(f'{datetime.datetime.now()}:{error}') logging.warning(f'{datetime.datetime.now()}:{error}')
print(error)
if __name__ == '__main__': if __name__ == '__main__':

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB