DjangoRestFramework - 如何将序列化器表单传递给前端?
DjangoRestFramework - How to pass a serializer form to the frontend?
我正在使用 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 有 API 页面显示用户列表(JSON 对象),它还有一个表单 "username"、"password" 和 "email"。此表单似乎可以正确验证(检查电子邮件是否为真实电子邮件,并检查用户名是否唯一且少于 30 个字符)。当用户转到 127.0.0.1:8000(调用 HomePageView)时,我有办法将此表单传递到前端吗?
我正在前端使用 AngularJS(不确定此信息是否有帮助)。
嗯,这里有一些我认为我们可能需要指出的事情。 Django 表单通常是您用来创建新用户的表单,使用 post 请求就像您尝试通过 DRF 所做的那样。现在您可以通过 DRF 执行此操作,但这并不是它的真正用途,django 表单更适合您正在做的事情。当然,除非您正在构建一个 API,您希望 API 用户能够使用它在您的平台上创建新用户,在这种情况下继续前进。我将我第一次开始使用 DRF 时使用的教程链接到 Angular,也许你会发现它有帮助。
http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html
我正在使用 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 有 API 页面显示用户列表(JSON 对象),它还有一个表单 "username"、"password" 和 "email"。此表单似乎可以正确验证(检查电子邮件是否为真实电子邮件,并检查用户名是否唯一且少于 30 个字符)。当用户转到 127.0.0.1:8000(调用 HomePageView)时,我有办法将此表单传递到前端吗?
我正在前端使用 AngularJS(不确定此信息是否有帮助)。
嗯,这里有一些我认为我们可能需要指出的事情。 Django 表单通常是您用来创建新用户的表单,使用 post 请求就像您尝试通过 DRF 所做的那样。现在您可以通过 DRF 执行此操作,但这并不是它的真正用途,django 表单更适合您正在做的事情。当然,除非您正在构建一个 API,您希望 API 用户能够使用它在您的平台上创建新用户,在这种情况下继续前进。我将我第一次开始使用 DRF 时使用的教程链接到 Angular,也许你会发现它有帮助。
http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html