Django 1.7 w/ AJAX,我如何 - 或在哪里,清理要在 AJAX 请求中传递的输入

Django 1.7 w/ AJAX, how - or where, do I clean input to be passed in AJAX request

本文关键字:AJAX 请求 输入 Django 在哪里      更新时间:2023-09-26

我有一个非常简单的django应用程序,它将一些表单输入传递到AJAX调用中。整个事情按原样运行良好,使用未清理的数据,但我想确保我只传递 [a-zA-Z],没有特殊的字符,也没有整数。最好在表单/模型字段上使用自定义验证器来处理这个问题吗?或者,在与 AJAX 请求关联的视图中清理它是否更好?

这是我的 AJAX 调用和相关视图的不完整片段。

$.ajax({
        url  : "/create_post/",
        type : "POST",
        data : {
            first_name : $('#id_first_name').val(),
            last_name  : $('#id_last_name').val(),
            department : $('#id_department').val()
        },

视图的相关部分:

def create_post(request):
    if request.method == 'POST':
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        department = request.POST.get('department')
...
    results = search(first_name, last_name, department)

首先,您肯定希望在服务器上执行此操作。出于可用性原因,建议在 javascript 中进行验证,但它不能替代服务器端验证。

处理来自 JSON 请求的数据验证与任何其他视图相同:使用 django 表单。像往常一样设置字段,加载数据并调用is_valid

所以,像这样:

class UserForm(Form):
    first_name = forms.RegexField(regex=r'$[a-zA-Z]^')
    # ...etc
def create_post(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            return search(form.cleaned_data['first_name'], ...)
        else:
            # some sort of error response