django 使用一个 url 运行自定义视图类方法

Posted

技术标签:

【中文标题】django 使用一个 url 运行自定义视图类方法【英文标题】:django run custom views class method with one url 【发布时间】:2020-06-10 19:32:11 【问题描述】:

我是 Django 新手。我想使用视图文件中的自定义方法来管理我的数据库。例如,我有这段代码我想用 javascript 运行 - 我写了这段代码:

Js:

$.ajax(
        type: 'POST',
        url: '/ClassManager/',
        data: 
            data: data,
            csrfmiddlewaretoken: csrftoken,
        ,
        success: function() 
            alert("IT WORKED")
        ,
        error: function() 
            alert('error');
        
    )

views.py

def expfunc():
    if request.method == 'POST':
            user = User.objects.get(pk=1)
            addlst = List(content = "list content", creator = user)
            addlst.save()

urls.py

urlpatterns = [
    path('ClassManager/', views.expfunc),
]

现在,问题是,对于我想在 views.py 中创建的每个新函数,我都需要在 urls.py 中添加另一行。

我的问题是 - 是否有办法使用所有自定义方法创建一个类,并使用一个 url 和不同的数据访问它们?

例如:

Js:

$.ajax(
        type: 'POST',
        url: '/ClassManager/functionone()',
        data: 
            data: data
            csrfmiddlewaretoken: csrftoken,
        ,
        success: function() 
            alert("IT WORKED")
        ,
        error: function() 
            alert('error');
        
    )

views.py

class DatabaseManager():
    def functionone(): # add new list
        if request.method == 'POST':
                user = User.objects.get(pk=1)
                addlst = List(content = "list content", creator = user)
                addlst.save()
    def functwo(): # update username
        if request.method == 'POST':
                user = User.objects.get(pk=1)
                user.id = 9
                user.save()
    def functhree(): # update list content
        if request.method == 'POST':
                user = User.objects.get(pk=1)
                mylist = List.objects.get(pk=1)
                mylist.content = "updated list content"
                mylist.save()

urls.py

urlpatterns = [
    path('ClassManager/functionone()', views.DatabaseManager.functionone),
]

我来自 asp.net 背景,在那里我编写了带有运行查询的函数的类,以及我如何管理我的数据库,所以我可以在这里做同样的事情吗?

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用Class Based View 将您的视图实现为 Python 对象而不是函数,但您不能使用 Ajax 调用类函数。

【讨论】:

基于类的视图只有 8 个我可以使用的特定方法...我无法创建自定义方法,我仍然需要在 urls.py 中为每个方法添加新行。这是你在 django 中编码的方式吗?对于每个视图方法,我需要在 urls.py 中添加新行吗?正如我所说:我是 django 的新手。 tysm 是的!您需要为每个视图添加一个 url 好的,谢谢!最后一个问题,如果我可以的话:你知道只有一个 url 和多个自定义函数来获得相同结果的任何其他方法吗?

以上是关于django 使用一个 url 运行自定义视图类方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自定义 django 404 错误视图重定向?

django-registration 视图自定义

django中的自定义登录URL

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

django 基于类的视图自定义 404 和 500

Django 自定义视图装饰器