Блок "популярное" в разделе публикаций
This commit is contained in:
parent
2a40e3957a
commit
4c536e528a
@ -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
15
data/popularity.py
Normal 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)
|
||||
BIN
db/moona_data.db
BIN
db/moona_data.db
Binary file not shown.
17
documents/шаблоны/Логотим Moona.svg
Normal file
17
documents/шаблоны/Логотим Moona.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 12 MiB |
98
main.py
98
main.py
@ -11,6 +11,7 @@ from data import db_session
|
||||
from data.answer_quest import Answer
|
||||
from data.diary_post import DiaryPost
|
||||
from data.like import Like
|
||||
from data.popularity import Popularity
|
||||
from data.questions import Quest
|
||||
from data.users import User
|
||||
from forms.add_question import AddQuest
|
||||
@ -76,10 +77,28 @@ def new_like(user_id, post_id, ret_href):
|
||||
session = db_session.create_session()
|
||||
find = session.query(Like).filter(Like.post == post_id, Like.user == user_id).first()
|
||||
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.commit()
|
||||
return redirect(f"/{ret_href}")
|
||||
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.user = user_id
|
||||
like.post = post_id
|
||||
@ -107,29 +126,62 @@ def publications():
|
||||
if abs((i.date - datetime.datetime.now()).days) <= day:
|
||||
fresh_posts.append(copy_pos.pop(copy_pos.index(i)))
|
||||
emotion_fresh = []
|
||||
for i in fresh_posts:
|
||||
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_fresh.append(emotion)
|
||||
return render_template('publications.html', fresh_post=fresh_posts, emotion_fresh=emotion_fresh, title='moona')
|
||||
if fresh_posts:
|
||||
for i in fresh_posts:
|
||||
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_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'])
|
||||
|
||||
BIN
static/img/MoonCcircl.png
Normal file
BIN
static/img/MoonCcircl.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 798 KiB |
@ -3,7 +3,104 @@
|
||||
|
||||
{% block content %}
|
||||
<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">
|
||||
<h1 class="post_zag">Свежее</h1>
|
||||
<div class="fresh_block" id="fresh">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user