开源软件名称:mixxorz/django-service-objects开源软件地址:https://github.com/mixxorz/django-service-objects开源编程语言:Python 99.4%开源软件介绍:django-service-objectsService objects for Django What?This is a small library providing a Installation guideInstall from pypi:
Add # settings.py
INSTALLED_APPS = (
...
'service_objects',
...
) ExampleLet's say you want to register new users. You could make a from django import forms
from service_objects.services import Service
class CreateUser(Service):
email = forms.EmailField()
password = forms.CharField(max_length=255)
subscribe_to_newsletter = forms.BooleanField(required=False)
def process(self):
email = self.cleaned_data['email']
password = self.cleaned_data['password']
subscribe_to_newsletter = self.cleaned_data['subscribe_to_newsletter']
self.user = User.objects.create_user(username=email, email=email, password=password)
self.subscribe_to_newsletter = subscribe_to_newsletter
if self.subscribe_to_newsletter:
newsletter = Newsletter.objects.get()
newsletter.subscribers.add(self.user)
newsletter.save()
return self.user
def post_process(self):
WelcomeEmail.send(self.user, is_subscribed=self.subsribe_to_newsletter)
# Calling a celery task after successfully creating the user.
create_billing_account.delay(self.user.id) Notice that it's basically a Django form but with a The newly added Here's how you use it: CreateUser.execute({
'email': 'kvothe@edemaruh.com',
'password': 'doorsofstone',
'subscribe_to_newsletter': True,
}) Now you can use it anywhere. In your views # views.py
# Function Based View
def create_user_view(request):
form = NewUserForm()
if request.method == 'POST':
form = NewUserForm(request.POST)
if form.is_valid():
try:
CreateUser.execute(request.POST)
return redirect('/success/')
except Exception:
form.add_error(None, 'Something went wrong')
return render(request, 'registration/new-user.html', {'form': form})
# Class Based View
class CreateUserView(ServiceView):
form_class = NewUserForm
service_class = CreateUser
template_name = 'registration/new-user.html'
success_url = '/success/' A management command # management/commands/create_user.py
class Command(BaseCommand):
help = "Creates a new user"
def add_arguments(self, parser):
parser.add_argument('email')
parser.add_argument('password')
def handle(self, *args, **options):
user = CreateUser.execute(options)
self.stdout.write(f'New user created : {user.email}') In your tests class CreateUserTest(TestCase):
def test_create_user(self):
inputs = {
'email': 'kvothe@edemaruh.com',
'password': 'do0r$0f$stone42',
'subscribe_to_newsletter': True,
}
CreateUser.execute(inputs)
user = User.objects.get()
self.assertEqual(user.email, inputs['email'])
newsletter = Newsletter.objects.get()
self.assertIn(user, newsletter.subscribers.all()) And anywhere you want. You can even execute services inside other services. The possibilities are endless! DocumentationDocs can be found on readthedocs. If you have any questions about service objects, you can tweet me @mixxorz. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论