【问题标题】:DjangoRestFramework - How to pass a serializer form to the frontend?DjangoRestFramework - 如何将序列化程序表单传递到前端?
【发布时间】:2015-07-22 19:32:06
【问题描述】:

我正在使用 DjangoRestFramework。我的 serializers.py 文件中有一个 UserSerialzer:

from django.contrib.auth.models import User

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('username', 'password', 'email', )

这是我的 urls.py 文件:

urlpatterns = [
    url(r'^$', views.HomePageView.as_view()),
    url(r'^users$', views.user_list.as_view()),
    url(r'^users/(?P<pk>[0-9]+)$', views.user_detail.as_view()),
]

这是我的views.py文件:

class HomePageView(TemplateView):
    template_name = "home.html"

    def get_context_data(self, **kwargs):
            context = super(HomePageView, self).get_context_data(**kwargs)
            # context['users'] = User.objects.all()
            return context

class user_list(APIView):
    """
    List all users, or create a new user.
    """
    serializer_class = UserSerializer

    def get(self, request):
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = UserSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

class user_detail(APIView):
    """
    Get, update or delete a specific user.
    """
    serializer_class = UserSerializer
    def get_object(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)

    def get(self, request, pk):
        user = self.get_object(pk)
        serializer = UserSerializer(user)
        return Response(serializer.data)

    def put(self, request, pk):
        user = self.get_object(pk)
        serializer = UserSerializer(user, data=request.DATA)
        if serialzier.is_valid():
            serializier.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk):
        user = self.get_object(pk)
        user.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

当我转到 127.0.0.1:8000/users 时,DjangoRestFramework 有一个显示用户列表(JSON 对象)的 API 页面,它还有一个包含“用户名”、“密码”和“电子邮件”的表单。此表单似乎正在正确验证(检查电子邮件是否为真实电子邮件,并检查用户名是否唯一且少于 30 个字符)。当用户转到 127.0.0.1:8000(调用 HomePageView)时,我有没有办法将此表单传递给前端?

我正在前端使用 AngularJS(不确定这些信息是否有帮助)。

【问题讨论】:

  • 我认为你的问题没有意义。 Django 的表单主要用于验证数据。这应该发生在服务器端。它们也可用于呈现 HTML 表单,但这不是表单的主要用途。是你要发送到前端的渲染后的 HTML 吗?
  • @wobbily_col 是的,我有 User 对象和 UserSerializer。当 POST 请求发送到 /users 时,视图会执行“if serializer.is_valid(): serializer.save()”。我计划将其更改为“if serializer.is_valid(): User.objects.create_user()”,但我希望能够为前端提供一个
    (它具有用户名、电子邮件和密码以及根据用户模型的要求对其进行验证),如果用户点击提交按钮,它应该将数据发送到 /users 并创建用户对象。
  • @wobbily_colI 我注意到默认的 DRF API 前端(我访问 /users 时看到的页面)有一个表单,当我在视图中输入“serializer_class= UserSerializer”时会执行此操作。

标签: django angularjs django-models django-forms django-rest-framework


【解决方案1】:

这里有几件事我认为我们可能需要指出。 Django 表单通常是您用来创建新用户的表单,就像您尝试通过 DRF 执行的那样使用发布请求。现在你可以通过 DRF 做到这一点,但这并不是它的真正用途,django 表单更适合你正在做的事情。当然,除非您正在构建一个 API,您希望 API 用户能够使用它在您的平台上创建新用户,在这种情况下继续前进。我正在链接我第一次开始使用 DRF 和 Angular 时使用的教程,也许你会发现它有帮助。

http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html

【讨论】:

  • 在整个互联网上寻找一个可行的可浏览 api 教程后,你救了我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2015-08-23
  • 2020-01-17
相关资源
最近更新 更多