Я хочу создать повторно используемую функцию в Django
Я новичок в django и работаю над проектом, в котором мне нужно отправлять обычные письма моим клиентам из разных модулей в моем проекте django.
Я хотел знать, есть ли в django какое-либо положение, с помощью которого я могу создать повторно используемый компонент, который можно использовать глобально в моем проекте.
Цель состоит в том, чтобы создать функцию отправки почты с использованием стороннего API и вызывать ее из любой точки моего приложения, просто передавая необходимые параметры.
3 ответа
Предполагая, что у вас есть одно приложение django в вашем проекте, вы можете определить все ваши повторно используемые методы внутри methods.py
файл в папке вашего приложения, а затем импортируйте его, чтобы использовать функции.
Если у вас есть несколько приложений, то определите создать это methods.py
в одном из ваших приложений. Теперь допустим, что имя вашего проекта coolprojectname
и название приложения, которое имеет methods.py
является appwithmethodsscript
тогда вы можете использовать
from coolprojectname.appwithmethodsscript import methods
Джанго следует правилам питона.
Таким образом, вы можете определить функцию в любом месте и импортировать ее, где вы хотите ее использовать.
Единственное условие для того, чтобы это работало, - чтобы ваши пакеты следовали правильной структуре (то есть каталогу, который имеет __init__.py
файл)
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
voted = models.BooleanField(default=False)
def __str__(self):
return self.user.username
class Position(models.Model):
position = models.CharField(max_length=50)
no_of_candidates = models.IntegerField(default=0)
about = models.TextField(default='')
def __str__(self):
return self.position
class Candidate(models.Model):
candidate = models.ForeignKey(Position, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
Description = models.TextField()
image = models.ImageField(upload_to='Vote/static/Vote', blank=True)
votes = models.IntegerField(default=0)
def __str__(self):
return self.name