STATIC_URL = '/static/'
manage.py runserver
), в корневом урле нужно прописать.urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
После команды "python manage.py collectstatic" файл favicon.svg копируется в:
from aiogram import BaseMiddleware
from aiogram.types import Message
class CounterMiddleware(BaseMiddleware):
def __init__(self) -> None:
self.counter = 0
async def __call__(
self,
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
event: Message,
data: Dict[str, Any]
) -> Any:
self.counter += 1
data['counter'] = self.counter
return await handler(event, data)
I. Юзер вводит логин/мыло, сервер генерирует новый пароль, сохраняет хеш в базу а чистую копию отсылает на почту.
II. Юзер вводит логин/мыло, сервер генерирует ссылку по типу domain.com/reset_pasword?token=dfsfgesdfs34asd...., где значение token является хешем - зашифрованным при помощи md5 логином и timestamp`ом, который сохраняется в бд (например в таблицу restet_password_history со столбцами: user_id | hash | is_changed ). При переходе по такой ссылке сервер проверяет, есть ли в базе данный хеш и is_changed == false. Если да, то выводится форма для ввода пароля. После отправки в таблицу с юзером сохраняется хеш нового пароля, а is_changed записи меняется на true.
P.S. Во втором варианте неплохо было бы сделать "срок жизни" такой ссылки, т.е. сохранить в указанной таблице текущие дату и время+час, к примеру, а при переходе по ссылке проверять текущее время.
import asyncio
import discord
from discord.ext import commands
from discord.ext.tasks import loop
bot = commands.Bot(command_prefix = '!!')
@loop(seconds=1)
async def bg_task():
pass # doing smth
@bot.command()
async def hi(ctx):
await ctx.send('Hi!')
bg_task.start()
bot.run('************************')
article_form = AddLectureForm()
content_form = AddContentForm()
context = {
'article_form ': article_form,
'content_form ': content_form
}
return render(request, 'main/render.html', context)
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form_one.as_p }}
{{ form_two.as_p }}
<input type="submit" value="ok">
</form>
при нажатии "+" или "-" значение joke.joke_rating соответственно увеличивалось или уменьшалось на один?
И еще почему-то JavaScript работает (в данном случае нет) только для верхнего анекдота. Для остальных выводит корректно joke_rating. Почему так?
<script type="text/javascript">
var joke_rating = '{{ joke.joke_rating }}';
document.getElementById('hi').innerHTML = joke_rating;
</script>
{% endblock %}
var joke_rating = '{{ joke.joke_rating }}';
, значение запишется в первый элемент. создать новую таблицу с нужными полями
добавить новые поля прямо в таблицу auth_user?
# models.py
def get_file_path(instance, filename):
"""
get_file_path - генерирует случайное имя для аватара
"""
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join('avatars/%Y/%m/%d/', filename)
....
class UserAccount(AbstractUser):
"""
Расширенная модель пользователя. Добавлено
отчество, аватар и необязательный внешний
ключ к учебной группе.
"""
avatar = models.ImageField(verbose_name='Аватар',
upload_to=get_file_path, blank=True)
patronymic_name = models.CharField(verbose_name='Отчество',
max_length=150,
blank=True)
study_group = models.ForeignKey(StudyGroup, on_delete=models.PROTECT,
blank=True, null=True,
verbose_name='Учебная группа')
# settings.py
AUTH_USER_MODEL = 'accounts.UserAccount'
И нужно ли знать, как работает веб на низком уровне?
Choose.objects.get_or_create(voter=request.user)
import time
def main() -> None:
a = 1
b = 2
c = 3
d = 4
e = 5
some_string = f'{a} {b} {c} {d} {e}'
print(some_string)
if __name__ == '__main__':
main()
time.sleep(10)
def main_2() -> None:
a = 1
b = 2
c = 3
d = 4
e = 5
some_string = f'{a} {b} {c} {d} {e}'
print(a, b, c, d, e)