client = form.save()
request.session['client_id'] = client.id
request.session.modified = True
redirect(reverse('app:view', kwargs={ 'bar': FooBar })) # Id записывать в kwargs
def get_us_avatar(self, obj):
print(repr(obj.avatar))
if obj.avatar:
return mark_safe(f'<img src="{obj.avatar.url}" alt="" height="100px">')
else:
return mark_safe(f'<img src="" alt="">')
import time
from os import path
import sqlite3 # Библиотека для работы с sqlite, не нужна
import openpyxl
# import pyodbc Установить библеотеку и раскоментить
def fetch_all_rows():
"""
Функция, выбирающая данные из БД
"""
con = sqlite3.connect('db.sqlite3') # Подключение к базе данных, заменить на
# conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Ron\Desktop\Test\test_database.accdb;')
# где C:\Users\Ron\Desktop\Test\test_database.accdb - путь до базы
cur = con.cursor()
cur.execute('select * from accounts_useraccount') # sql-запрос для выборки. Подставить свой для правильной выборки
users = cur.fetchall() # Запись полученных данных в переменную
cur.close() # Закрытие соединения
return users
def generare_xcls_files(users):
user_set = users # получение юзеров
excel_file = openpyxl.load_workbook('template.xlsx') # Открытие шаблона, подставить свое имя
employees_sheet = excel_file['Карточка'] # Выбор активной таблицы, подставить свое имя
i = 1 # Переменная, в которую будет записываться номер цикла, нужно чисто для красивого имених xlsx файла
for user in users: # Цикл по всем данным
username = user[4] # Получение значение конкретного столбца таблицы. ВАЖНО - НУМИРАЦИЯ НАЧИНАЕТСЯ С 0
email = user[7] # Т.Е. ЧТОБЫ ВЫБРАТЬ ЗНАЧЕНИЕ ИЗ СТОЛБЦА EMAIL, КОТОРЫЙ ЯВЛЯЕТСЯ 8 ПО СЧЕТУ В ТАБЛИЦЕ, НУЖНО УКАЗАТЬ 7
employees_sheet['B1'] = username #Запись полученного значения в конкретную ячейку
employees_sheet['B2'] = email
filename = f'{i}_{username}_{email}.xlsx' # Генерация имени файла, состоящего из нескольких значений (номер цикла и т.д.).
filename = path.join('files', filename) # Добавление к имени файла пути до папки files, в одном со скриптом каталоге. ВАЖНО - папку нужно создать вручную.
i+=1 # увеличение переменной на 1
excel_file.save(filename=filename) # cохранение нового файла
if __name__ == '__main__':
users = fetch_all_rows() # Запуск функций
generare_xcls_files(users)
from django.db.models.signals import post_save
from django.dispatch import receiver
# method for updating
@receiver(post_save, sender=Zakaz)
def update_stock(sender, instance, **kwargs):
# instance - созданный объект, к которому можно обратится
# Здесь создавать объект
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>