This commit is contained in:
aneuhmanh 2025-02-18 11:12:47 +02:00
parent dc70b84446
commit 2fbaaf9085
4 changed files with 37 additions and 33 deletions

4
.env.example Normal file
View File

@ -0,0 +1,4 @@
SECRET_KEY=some_super_secret_key
RECAPTCHA_PUBLIC_KEY=your_public_recaptcha_key
RECAPTCHA_PRIVATE_KEY=your_private_recaptcha_key
SQLALCHEMY_DATABASE_URI=db_path

1
.gitignore vendored
View File

@ -8,3 +8,4 @@
/static/videos/ /static/videos/
/venv/ /venv/
/__pycache__/ /__pycache__/
.env

View File

@ -1,7 +1,7 @@
[![](https://artberry.xyz/static/Logo.svg "test")](https://artberry.xyz/static/Logo.svg "test") [![](https://artberry.xyz/static/Logo.svg "test")](https://artberry.xyz/static/Logo.svg "test")
### booru сайт нового поколения ### booru сайт нового поколения
**Приватный репозиторий для разработки и тестирования новых версий веб-приложения artberry** **репозиторий для разработки и тестирования новых версий веб-приложения artberry**
------------ ------------
@ -21,28 +21,28 @@
#### ЗАПУСК И ТЕСТИРОВАНИЕ #### ЗАПУСК И ТЕСТИРОВАНИЕ
**Для удобства и скорости разработки выполните следующие шаги:** #### Для удобства и скорости разработки выполните следующие шаги:
#### создайте виртуальное окружение: #### создайте виртуальное окружение:
`python -m venv venv` - `python -m venv venv`
#### запустите виртуальное окружение: #### запустите виртуальное окружение:
WINDOWS: *WINDOWS*:
**powershell: **` .\venv\Scripts\Activate` - **powershell:** ` .\venv\Scripts\Activate`
**CMD: **`venv\Scripts\activate.bat` - **CMD:** `venv\Scripts\activate.bat`
LINUX | MAC: *LINUX* | *MAC*:
`source venv/bin/activate` - `source venv/bin/activate`
#### установите зависимости: #### установите зависимости:
`pip install -r requirements.txt` - `pip install -r requirements.txt`
#### запустите проект #### запустите проект
`python app.py` или `flask run` - `python app.py` или `flask run`
##### Для отладки в конце файла `app.py` измените: #### Для отладки в конце файла `app.py` измените:
`app.run(debug=False)` **на:** `app.run(debug=True)` - `app.run(debug=False)` **на:** `app.run(debug=True)`
------------ ------------

39
app.py
View File

@ -24,26 +24,28 @@ from wtforms.validators import DataRequired, Length, EqualTo, ValidationError, R
from wtforms import StringField, PasswordField, SubmitField from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo, Regexp from wtforms.validators import DataRequired, EqualTo, Regexp
from flask_wtf import FlaskForm, RecaptchaField from flask_wtf import FlaskForm, RecaptchaField
from dotenv import load_dotenv
app = Flask(__name__) app = Flask(__name__)
csrf = CSRFProtect(app) csrf = CSRFProtect(app)
load_dotenv()
app.config.update( app.config.update(
SECRET_KEY='PASTE SOMETHING HERE', SECRET_KEY=os.getenv('SECRET_KEY'),
WTF_CSRF_ENABLED=True, WTF_CSRF_ENABLED=True,
RECAPTCHA_PUBLIC_KEY="PASTE RECAPTCHA KEY HERE", RECAPTCHA_PUBLIC_KEY=os.getenv('RECAPTCHA_PUBLIC_KEY'),
RECAPTCHA_PRIVATE_KEY="PASTE RECAPTCHA KEY HERE", RECAPTCHA_PRIVATE_KEY=os.getenv('RECAPTCHA_PRIVATE_KEY'),
SQLALCHEMY_DATABASE_URI='sqlite:///artberry.db', SQLALCHEMY_DATABASE_URI=os.getenv('SQLALCHEMY_DATABASE_URI'),
UPLOAD_FOLDER={ UPLOAD_FOLDER={
'images': 'static/arts/', 'images': 'static/arts/',
'arts': 'static/arts/', 'arts': 'static/arts/',
'videos': 'static/videos/', 'videos': 'static/videos/',
'thumbnails': 'static/thumbnails/', 'thumbnails': 'static/thumbnails/',
'avatars': 'static/avatars/', 'avatars': 'static/avatars/',
'banners': 'static/banners/', 'banners': 'static/banners/',
'comics': 'static/comics', 'comics': 'static/comics',
'comicthumbs': 'static/comicthumbs', 'comicthumbs': 'static/comicthumbs',
'posts': 'static/posts/' 'posts': 'static/posts/'
}, },
ALLOWED_IMAGE_EXTENSIONS={'png', 'jpg', 'jpeg', 'gif', 'webp', 'gif'}, ALLOWED_IMAGE_EXTENSIONS={'png', 'jpg', 'jpeg', 'gif', 'webp', 'gif'},
ALLOWED_VIDEO_EXTENSIONS={'mp4', 'avi', 'mov'}, ALLOWED_VIDEO_EXTENSIONS={'mp4', 'avi', 'mov'},
@ -97,9 +99,6 @@ class User(db.Model, UserMixin):
avatar_file = db.Column(db.String(50), nullable=True) avatar_file = db.Column(db.String(50), nullable=True)
banner_file = db.Column(db.String(50), nullable=True) banner_file = db.Column(db.String(50), nullable=True)
bio = db.Column(db.Text, nullable=True) bio = db.Column(db.Text, nullable=True)
show_publications = db.Column(db.Boolean, default=True)
hide_elements = db.Column(db.Boolean, default=False)
site_mask = db.Column(db.Boolean, default=False)
current_item = db.Column(db.String(30), nullable=True) current_item = db.Column(db.String(30), nullable=True)
def __repr__(self): def __repr__(self):
@ -461,9 +460,9 @@ def image_edit(id):
) )
class EditVideoForm(FlaskForm): class EditVideoForm(FlaskForm):
video_name = StringField('Title', validators=[DataRequired(), Length(max=100)], render_kw={"placeholder": "Введите название видео"}) video_name = StringField('Title', validators=[DataRequired(), Length(max=100)], render_kw={"placeholder": "Enter video title"})
video_thumbnail = FileField('Thumbnail', validators=[FileAllowed(['jpg', 'jpeg', 'png', 'gif'], 'Только изображения!')]) video_thumbnail = FileField('Thumbnail', validators=[FileAllowed(['jpg', 'jpeg', 'png', 'gif'], 'Only images!')])
description = TextAreaField('Description', validators=[DataRequired(), Length(max=500)], render_kw={"placeholder": "Введите описание видео"}) description = TextAreaField('Description', validators=[DataRequired(), Length(max=500)], render_kw={"placeholder": "Enter video description"})
tags = StringField('Tags', validators=[DataRequired(), Length(max=100)], render_kw={"placeholder": "Tags"}) tags = StringField('Tags', validators=[DataRequired(), Length(max=100)], render_kw={"placeholder": "Tags"})
submit = SubmitField('Save') submit = SubmitField('Save')
@ -1596,4 +1595,4 @@ def buy_item(item_id):
if __name__ == '__main__': if __name__ == '__main__':
with app.app_context(): with app.app_context():
db.create_all() db.create_all()
app.run(debug=True) app.run(debug=False)