Django注册1.0的AJAX表单发布

格兰特大学

我认为Django注册1.0的子类是:

class RegistrationView(RegistrationView):
    pass

我这样做是因为我现在想通过AJAX发表文章。我不确定我必须覆盖哪些方法?有什么例子或建议吗?

这是我的view.py:

{% block content %}
<form method="post" action="" id="registration">

  {{ form.as_p }}

  <input type="submit" value="{% trans 'Submit' %}" />
</form>



 <script>


$('#registration').submit(function(e){
     e.preventDefault(); //prevent default form submit

   $.ajax({

       url: '/accounts/register/',
       type: 'POST',
       contentType: "application/json;charset=utf-8",
       dataType: "json",
       data: {
            'csrfmiddlewaretoken': '{% csrf_token %}',
            'id_username': $("#id_username").val(),
            'id_email': $("#id_email").val()
            },
        success: function() {
            alert('Test');

        },
        error: function(errorThrown){
            console.log(errorThrown);
            alert('Error');
            alert(errorThrown);
        }
    });



});

Django注册1.0视图

class RegistrationView(_RequestPassingFormView):
    """
    Base class for user registration views.

    """
    disallowed_url = 'registration_disallowed'
    form_class = RegistrationForm
    http_method_names = ['get', 'post', 'head', 'options', 'trace']
    success_url = None
    template_name = 'registration/registration_form.html'

    def dispatch(self, request, *args, **kwargs):
        """
        Check that user signup is allowed before even bothering to
        dispatch or do other processing.

        """
        if not self.registration_allowed(request):
            return redirect(self.disallowed_url)
        return super(RegistrationView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, request, form):
        new_user = self.register(request, **form.cleaned_data)
        success_url = self.get_success_url(request, new_user)

        # success_url may be a simple string, or a tuple providing the
        # full argument set for redirect(). Attempting to unpack it
        # tells us which one it is.
        try:
            to, args, kwargs = success_url
            return redirect(to, *args, **kwargs)
        except ValueError:
            return redirect(success_url)

    def registration_allowed(self, request):
        """
        Override this to enable/disable user registration, either
        globally or on a per-request basis.

        """
        return True

    def register(self, request, **cleaned_data):
        """
        Implement user-registration logic here. Access to both the
        request and the full cleaned_data of the registration form is
        available here.

        """
        raise NotImplementedError
马里奥杰夫

最初并没有真正创建“ registration 1.0”应用程序来支持ajax,因此您有很多工作要做。

为了使注册工作正常,您需要以下内容:

import json
from django.http import HttpResponse
from django.views.generic.edit import CreateView
from django.contrib.auth.models import User

from registration.views import RegistrationView


class AjaxableResponseMixin(object):
    def get_form_kwargs(self):
        kwargs = {'initial': self.get_initial()}
        if self.request.method in ('POST', 'PUT'):
            dict_ = self.request.POST.copy()
            del dict_['csrfmiddlewaretoken']
            kwargs.update({
                'data': dict_,
                'files': self.request.FILES,
            })
        return kwargs

    def render_to_json_response(self, context, **response_kwargs):
        data = json.dumps(context)
        response_kwargs['content_type'] = 'application/json'
        return HttpResponse(data, **response_kwargs)

    def form_invalid(self, form):
        response = super(AjaxableResponseMixin, self).form_invalid(form)

        if self.request.is_ajax():
            return self.render_to_json_response(form.errors, status=400)
        else:
            return response

    def form_valid(self, request, form):
        if self.request.is_ajax():
            new_user = self.register(request, **form.cleaned_data)
            data = {
                'pk': new_user.pk,
            }
            return self.render_to_json_response(data)
        else:
            response = super(AjaxableResponseMixin, self).form_valid(request, form)
            return response


class MyRegistrationView(AjaxableResponseMixin, RegistrationView):
    def register(self, request, **cleaned_data):
        del cleaned_data['password2']
        user = User.objects.create_user(data['username'], data['email'], data['password1'])
        return user

urls.py

(r'^accounts/register/', MyRegistrationView.as_view()),
(r'^accounts/', include('registration.backends.default.urls')),

html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
    <form id="registration" action="." method="post">{% csrf_token %}
        {{ form }}
        <input type="submit" name="submit" value="Submit" />
    </form>
    <script type="text/javascript">
        $('#registration').submit(function(e){
            e.preventDefault();
            $.ajax({
                url: '/accounts/register/',
                type: 'POST',
                dataType: "json",
                beforeSend: function (request) {
                    request.setRequestHeader("X-CSRFToken", $('input[name="csrfmiddlewaretoken"]').val());
                },
                data: $('#registration').serialize(),
                success: function() {
                    console.log('success');
                },
                error: function(errorThrown){
                    console.log(errorThrown);
                }
            });
        });
    </script>
</body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Django 中注册表单不会发布请求方法

来自分类Dev

Django表单-发布

来自分类Dev

如何在没有JQuery的情况下将Ajax发布到Django表单

来自分类Dev

如何在没有JQuery的情况下将Ajax发布到Django表单

来自分类Dev

使用ajax发布表单数据在django中出现csrf错误

来自分类Dev

Django 表单发布没有错误的数据,但未注册为“is_valid”

来自分类Dev

Django用户注册/注册表单不起作用

来自分类Dev

使用AJAX将表单数据发布到Fw / 1(Coldfusion)控制器功能

来自分类Dev

NoReverseMatch:在Django注册的密码重置表单中?

来自分类Dev

Django用户注册表单KeyError

来自分类Dev

Django 编辑本机注册表单

来自分类Dev

表单未在 Django Admin 上注册

来自分类Dev

Django Ajax发布请求

来自分类Dev

从弹出表单发布Ajax

来自分类Dev

Django中的Ajax发布问题

来自分类Dev

CodeIgniter - AJAX 注册表单验证

来自分类Dev

如何发布到allauth注册表单以填写初始数据?

来自分类Dev

注册表单发布操作期间的 PHP 错误

来自分类Dev

Django-表单输入字段未发布

来自分类Dev

从Ajax发布MVC Razor表单

来自分类Dev

Ajax表单不会发布

来自分类Dev

如何在django-registration中将注册表单分类

来自分类Dev

django主页上的allauth登录和注册表单

来自分类Dev

Django-Allauth:注册表单中的可选字段

来自分类Dev

django-allauth-覆盖默认注册表单

来自分类Dev

django-allauth注册表单中用户的外部模型

来自分类Dev

注册表单中缺少 Django CSRF 令牌

来自分类Dev

用于用户登录/注册的 Django 模式 - 表单渲染问题

来自分类Dev

如何在Django注册Redux注册表单中添加名字和姓氏?