Блок "популярное" в разделе публикаций

This commit is contained in:
mrmur 2022-04-18 15:04:07 +05:00
parent 2a40e3957a
commit 4c536e528a
7 changed files with 206 additions and 25 deletions

View File

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

15
data/popularity.py Normal file
View File

@ -0,0 +1,15 @@
import sqlalchemy
from flask_login import UserMixin
from .db_session import SqlAlchemyBase
class Popularity(SqlAlchemyBase, UserMixin):
__tablename__ = 'popularity'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
post = sqlalchemy.Column(sqlalchemy.Integer,
sqlalchemy.ForeignKey("posts.id"), nullable=True, default=None)
popularity = sqlalchemy.Column(sqlalchemy.Integer,
nullable=True, default=None)
edit_date = sqlalchemy.Column(sqlalchemy.DateTime, nullable=True, default=None)

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 MiB

98
main.py
View File

@ -11,6 +11,7 @@ from data import db_session
from data.answer_quest import Answer from data.answer_quest import Answer
from data.diary_post import DiaryPost from data.diary_post import DiaryPost
from data.like import Like from data.like import Like
from data.popularity import Popularity
from data.questions import Quest from data.questions import Quest
from data.users import User from data.users import User
from forms.add_question import AddQuest from forms.add_question import AddQuest
@ -76,10 +77,28 @@ def new_like(user_id, post_id, ret_href):
session = db_session.create_session() session = db_session.create_session()
find = session.query(Like).filter(Like.post == post_id, Like.user == user_id).first() find = session.query(Like).filter(Like.post == post_id, Like.user == user_id).first()
if find: if find:
if (find.date - datetime.datetime.now()).days <= 30:
pop = session.query(Popularity).filter(Popularity.post == post_id).first()
pop.popularity = 10 * sum(1 if (i.date - datetime.datetime.now()).days <= 30 else 0 for i in
session.query(Like).filter(Like.post == post_id).all()) - 10
if not pop.popularity:
session.delete(pop)
session.delete(find) session.delete(find)
session.commit() session.commit()
return redirect(f"/{ret_href}") return redirect(f"/{ret_href}")
else: else:
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:
if (find.date - datetime.datetime.now()).day <= 30:
pop = session.query(Popularity).filter(Popularity.post == post_id).first()
pop.popularity = 10 * sum(1 if (i.date - datetime.datetime.now()).day <= 30 else 0 for i in
session.query(Like).filter(Like.post == post_id).all()) + 10
like = Like() like = Like()
like.user = user_id like.user = user_id
like.post = post_id like.post = post_id
@ -107,29 +126,62 @@ def publications():
if abs((i.date - datetime.datetime.now()).days) <= day: if abs((i.date - datetime.datetime.now()).days) <= day:
fresh_posts.append(copy_pos.pop(copy_pos.index(i))) fresh_posts.append(copy_pos.pop(copy_pos.index(i)))
emotion_fresh = [] emotion_fresh = []
for i in fresh_posts: if fresh_posts:
emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [], for i in fresh_posts:
'author': session.query(User).filter(User.id == i.author).first(), 'like': None, 'is_like': 0} emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [],
if i.pos_emot: 'author': session.query(User).filter(User.id == i.author).first(), 'like': None, 'is_like': 0}
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 = session.query(Like).filter(Like.post == i.id).all() emotion['link'] = None
if like: like = session.query(Like).filter(Like.post == i.id).all()
emotion['like'] = len(like) if like:
if current_user.is_authenticated: emotion['like'] = len(like)
if session.query(Like).filter(Like.post == i.id, Like.user == current_user.id).first(): if current_user.is_authenticated:
emotion['is_like'] = 1 if session.query(Like).filter(Like.post == i.id, Like.user == current_user.id).first():
emotion_fresh.append(emotion) emotion['is_like'] = 1
return render_template('publications.html', fresh_post=fresh_posts, emotion_fresh=emotion_fresh, title='moona') emotion_fresh.append(emotion)
pop = sorted(session.query(Popularity).all(), key=lambda x: x.popularity, reverse=True)
if pop:
if len(pop) > 50:
pop = pop[:50]
pop_post = [session.query(DiaryPost).filter(DiaryPost.public == 1, DiaryPost.id == i.post).first() for i in pop]
emotion_pop = []
for i in pop_post:
emotion = {id: i.id, 'pos_emot': [], 'nig_emot': [], 'link': [],
'author': session.query(User).filter(User.id == i.author).first(), 'like': None, 'is_like': 0}
if i.pos_emot:
emotion['pos_emot'] = i.pos_emot.split()
else:
emotion['pos_emot'] = None
if i.nig_emot:
emotion['nig_emot'] = i.nig_emot.split()
else:
emotion['nig_emot'] = None
if i.link:
emotion['link'] = i.link.split()
else:
emotion['link'] = None
like = session.query(Like).filter(Like.post == i.id).all()
if like:
emotion['like'] = len(like)
if current_user.is_authenticated:
if session.query(Like).filter(Like.post == i.id, Like.user == current_user.id).first():
emotion['is_like'] = 1
emotion_pop.append(emotion)
else:
pop_post = []
emotion_pop = []
return render_template('publications.html', fresh_post=fresh_posts, emotion_fresh=emotion_fresh, title='moona',
pop_post=pop_post, emotion_pop=emotion_pop)
@app.route('/answer_quest/<int:id>', methods=['GET', 'POST']) @app.route('/answer_quest/<int:id>', methods=['GET', 'POST'])

BIN
static/img/MoonCcircl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 KiB

View File

@ -3,7 +3,104 @@
{% block content %} {% block content %}
<table> <table>
<td id="row1"></td> <td id="row1">
<h1 class="post_zag">Популярное</h1>
<div class="fresh_block" id="pop">
{% if pop_post != [] %}
{% for item in pop_post %}
<div class="card-body post">
<details>
<summary>
{% if item.name != None %}
<h2 class="card-title post_zag" style="color:#c5f1ff">{{item.name}}</h2>
{% endif %}
</summary>
{% if item.text != None %}
<strong class="card-text" style="color:#ffffff">{{item.text}}</strong>
{% endif %}
</details>
{% if emotion_pop[loop.index0]['pos_emot'] != None %}
<div class="pos_emot">
<details>
<summary class="emot_block">
<strong class="emot_block">Позитивные эмоции</strong>
</summary>
<p></p>
{% for item2 in emotion_pop[loop.index0]['pos_emot'] %}
<strong class="alert alert-success" role="alert" style="border-radius: 22px;">{{item2}}</strong>
{% endfor %}
</details>
</div>
<p></p>
{% endif %}
{% if emotion_pop[loop.index0]['nig_emot'] != None %}
<div class="nig_emot">
<details>
<summary class="emot_block">
<strong class="emot_block">Негативные эмоции</strong>
</summary>
<p></p>
{% for item2 in emotion_pop[loop.index0]['nig_emot'] %}
<strong class="alert alert-danger" role="alert" style="border-radius: 22px;">{{item2}}</strong>
{% endfor %}
</details>
</div>
<p></p>
{% endif %}
{% if item.photo != None %}
<p></p>
<div class="photo">
<img width="90%" src="{{ item.photo }}"
style="border-radius: 22px;">
</div>
<p></p>
{% endif %}
{% if current_user.is_authenticated %}
<div class="like">
<a type="button"
href="/new_like/{{current_user.id}}/{{item.id}}/publications">
{% if emotion_pop[loop.index0]['is_like'] %}
<img src="../static/img/like_add.png" width="117" height="100">
{% else %}
<img src="../static/img/like.png" width="94" height="80">
{% endif %}
</a>
{% if emotion_pop[loop.index0]['like'] != None %}
<p style="color:#ffffff">{{emotion_pop[loop.index0]['like']}}</p>
{% endif %}
</div>
{% endif %}
{% if emotion_pop[loop.index0]['link'] != None %}
<details>
<summary class="emot_block">
<strong class="emot_block">Ссылки</strong>
</summary>
<p></p>
{% for item2 in emotion_pop[loop.index0]['link'] %}
<div class="link">
<a class="alert alert-light" role="alert" href="{{ item2 }}" style="border-radius: 22px;">Ссылка
{{ loop.index }}</a>
</div>
<p></p>
{% endfor %}
</details>
{% endif %}
<div class="author" style="style=position:absolute; width:148px; height:44px; left:255px; -webkit-border-radius:
22px;-moz-border-radius: 22px;border-radius: 22px; border:2px solid #FFFFFF; background-color:#1daff0; top:
98px;"><img src="../{{ emotion_pop[loop.index0]['author'].photo }}" width="40" height="40"
style="border-radius: 22px">
<strong style="color: #ffffff">{{ emotion_pop[loop.index0]['author'].name }}</strong>
</div>
<strong style="color:#ffffff">{{item.date}}</strong>
</div>
{% endfor %}
</div>
{% else %}
<div class="bad_centre" style="background-color:#1daff0; border-radius: 22px;color:#ffffff">
<h1 class="hz1">Ничего не нашлось :с</h1>
</div>
{% endif %}
</td>
<td id="row2"> <td id="row2">
<h1 class="post_zag">Свежее</h1> <h1 class="post_zag">Свежее</h1>
<div class="fresh_block" id="fresh"> <div class="fresh_block" id="fresh">