如何在Django视图中将某些代码从post方法移动到单独的方法

2024-10-02 00:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,它从表单中获取一些信息,对表单进行一些更改。然后将其保存到数据库中 目前,所有的逻辑都在post方法中。我想让代码更结构化,我想把它的一部分放到一个单独的方法中。可能吗?如果是,我怎么做

这是我的密码:

class AddSiteView(View):
    form_class = AddSiteForm
    template_name = 'home.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, { 'form': form })
    
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            site_instanse = form.save()
            url = request.POST.get('url', '')
            if url.endswith('/'):
                url = url + "robots.txt" 
            else:
                url = url + "/robots.txt"

            robot_link = Robot(
                site = site_instanse,
                link = url,
                )
            robot_link.save()
            pk = Robot.objects.get(site=site_instanse)
            
            return redirect('checks:robots', pk.id)
        
        return render(request, self.template_name, { 'form': form })

我想对其进行两项更改: 我想做的第一件事是将这部分代码移动到一个单独的方法中

if url.endswith('/'):
    url = url + "robots.txt" 
else:
    url = url + "/robots.txt"

我想做的第二件事是用一个单独的方法移动这部分代码

robot_link = Robot(
                site = site_instanse,
                link = url,
                )
robot_link.save()
pk = Robot.objects.get(site=site_instanse)
return redirect('checks:robots', pk.id)

原因是我将在这里添加更多函数。我不想把所有的都放在post方法中。如果可能的话,请帮助我。我已经试过几种解决这个问题的方法,但都不管用 多谢各位


Tags: 方法selfformtxturlgetreturnrequest
1条回答
网友
1楼 · 发布于 2024-10-02 00:33:34

Django没有什么特别的地方阻止您使用普通python函数。因此,如果您知道如何定义方法和函数,那么应该采用相同的方法。例如,第一部分可以是函数

def get_robots_url(url):
    if url.endswith('/'):
        url = url + "robots.txt" 
    else:
        url = url + "/robots.txt"
    return url

然后在同一位置调用提取的函数

def post(self, request, *args, **kwargs):
    form = self.form_class(request.POST)
    if form.is_valid():
        site_instance = form.save()
        url = request.POST.get('url', '')
        url = get_robots_url(url)
    ....

您还可以在class-a方法中定义一个函数来对代码进行分组。第二部分:

class AddSiteView(View):
...
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            site_instanse = form.save()
            url = request.POST.get('url', '')
            url = get_robots_url(url)
            return self.create_robot(site_instanse, url)
        return render(request, self.template_name, { 'form': form })

    def create_robot(self, site_instance, url):
        robot_link = Robot(
            site = site_instanse,
            link = url,
            )
        robot_link.save()
        pk = Robot.objects.get(site=site_instance)
        return redirect('checks:robots', pk.id)
   

相关问题 更多 >

    热门问题