【问题标题】:django run custom views class method with one urldjango 使用一个 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 背景,在那里我编写了带有运行查询的函数的类,以及我如何管理我的数据库,所以我可以在这里做同样的事情吗?

提前致谢!

【问题讨论】:

    标签: javascript django ajax django-models django-templates


    【解决方案1】:

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

    【讨论】:

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