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

Python 如何在Django视图中将某些代码从post方法移动到单独的方法,python,django,view,Python,Django,View,我有一个类,它从表单中获取一些信息,对表单进行一些更改。然后将其保存到数据库中 目前,所有的逻辑都在post方法中。我想让代码更结构化,我想把它的一部分放到一个单独的方法中。可能吗?如果是,我怎么做 这是我的密码: class AddSiteView(View): form_class = AddSiteForm template_name = 'home.html' def get(self, request, *args, **kwargs): fo

我有一个类,它从表单中获取一些信息,对表单进行一些更改。然后将其保存到数据库中 目前,所有的逻辑都在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)
我想做的第二件事是用一个单独的方法移动这部分代码

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方法中。如果可能的话,请帮助我。我已经试过几种解决这个问题的方法,但都不管用
谢谢

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)
   

这不管用。它给出了一个错误:未定义site_实例谢谢您的评论。我采纳了你的建议。但是现在我有另一个问题-也许你知道如何修复它-变量名中有一个输入错误。这是实例,不是实例。我已经纠正了拼写错误,现在一切正常。非常感谢!你帮了我很多