【问题标题】:Where should i put the django logic我应该把 django 逻辑放在哪里
【发布时间】:2018-10-17 12:06:32
【问题描述】:

这是我的表格:

class UploadForm(forms.ModelForm):

    upload_what = forms.URLField()
    upload_what.widget.attrs.update(size = '100')

所以它很简单,在用户粘贴link 后,我需要检查链接是否代表catdog,根据这一发现,我将上传一个新的catdog 在我遵循一些特定步骤后我的数据库中的对象。

我的问题是:

我将所有这些逻辑放在哪里?在viewformmodel?请记住,catdog 模型具有不同的字段,并且会在后台进行一些处理以确定必须填写哪些字段。

我确实读过这种做法是将所有逻辑放在models(胖模型)中,但在这里我真的不知道当用户触发Submit 按钮时我将使用哪个模型。

例如,在我的views.py 中,它可能看起来像这样:

def post(self,request,*args,**kwargs):

    form = self.form_class(request.POST)
    if form.is_valid():
        link = form.cleaned_data['upload_what']
        if link == "cat":
            name = "some cat name"
            legs = #do some logic here
            # save cat to database
        elif link == "dog":
            #... some other logic here

            #save dog to database
        return HttpResponseRedirect('/success/')

【问题讨论】:

  • 因为这是一个有点寻求意见的问题:我遵循一种模式,我创建了一个名为applogic.py 的单独模块,与models.py 放在同一文件夹中。这个applogic 模块充当您的视图和模型之间的“桥梁”,并包含您所描述的逻辑。在您的情况下,我可能会按照save_uploads(link, **form_data) 的方式定义一个函数。这使您的视图保持干净,并允许您编写不隐藏在视图和表单处理程序中的可重用、可测试的代码。

标签: django forms view


【解决方案1】:

view.py 是 Django 的逻辑部分。您可以声明基于类的结构或使用众所周知的方法。

The class-based view:

# some_app/views.py
from django.views.generic import TemplateView

class AboutView(TemplateView):
    template_name = "about.html"

The method-based view:

from django.shortcuts import render

def aboutview(request):
   return render(request, 'about.html' )

【讨论】:

    【解决方案2】:

    view.py 是你的应用程序逻辑的地方,View.py

    【讨论】:

      猜你喜欢
      • 2013-12-09
      • 2017-04-19
      • 1970-01-01
      • 2020-09-30
      • 2018-06-14
      • 2022-10-05
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多