表单数据验证(相当于表格.u有效吗)在Django消费者中(Django频道)

2024-04-26 22:39:47 发布

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

我正在从基于http的设置(Django表单、视图等)转向使用Django通道的websocket设置(原因不可避免)。在基于http的设置中,我使用模板中的表单(3个字段-名称、编号、城市)输入一些数据:

<form id="EntryForm" method="POST">
      {% csrf_token %}
      <div class="form-group ">
        {{ form }}
      </div>
      <button type="submit">Submit</button>
</form>

由于此数据以前是作为Django表单提交的(使用“class Meta:”将其映射到我的Django模型),因此我可以在我的视图.py使用表格.u有效吗()方法。表单数据中的每个字段都有特定的条件,如CharField(max\u length)等,这些条件是由我的中的is\u valid()方法验证的视图.py地址:

if request.method == 'POST':
    form = EntryForm(request.POST, instance=Entry(user=request.user))
    if form.is_valid():
        form.save()
        messages.success(request, f'Submission accepted.')
...

正如您在上面所看到的,表单属于我的应用程序中的表单类“EntryForm”表单.py,它映射到我的型号.py(其中包含名称、编号和城市等字段)。你知道吗

但在Django通道中,为了提交表单数据,我必须使用脚本to.preventDefault(),然后将数据作为单独的字典发送到我的消费者.py,它不是以Django形式出现的。这是我的剧本:

<script>
$(document).ready(function(){

    var form_data = $("#EntryForm")
    ...
    ...
    socket.onopen = function(e){
        form_data.submit(function(event){
            event.preventDefault()
            var form_entry = {
                "name": $("#id_name").val(),
                "number": $("#id_number").val(),
                "city": $("#id_city").val()
            }
            socket.send(JSON.stringify(form_entry))
            form_data[0].reset()
        })
    }

此表格的输入数据将转到我的消费者.py,但由于它不再是Django form对象,因此我无法使用.is\u valid()方法来验证数据(CharField max\u length等)。我需要先验证数据,然后才能在我的系统中处理它消费者.py你知道吗

官方文档没有涵盖这一点,因为它使用了一个聊天应用程序的例子,不需要任何这样的验证。事实上,它甚至不使用Django形式。你知道吗

我有两个问题:

  1. 我可以在我的应用程序中实例化EntryForm对象吗消费者.py然后在上面使用.is\u valid()方法?既然不是http请求,我该怎么做?

  2. 如果没有,我如何验证我的表单输入数据以确保它符合模型字段的条件(DecimalField、CharField、max\u length等)?


Tags: 数据django方法pyform视图idhttp
1条回答
网友
1楼 · 发布于 2024-04-26 22:39:47

结果比我想象的要容易。不需要DRF或任何其他框架。你知道吗

在consumer中,我使用来自前端的传入数据实例化了模型(Entry)的一个对象,然后继续对其执行所需的操作。Django会自动检查数据是否符合我在模型字段(CharField、max\ length等)中设置的条件,并告诉用户是否有错误!令人印象深刻的是,即使没有形式,这也是有效的。节省了我很多工作和时间。你知道吗

相关问题 更多 >