2

我正在使用DjangoRestFramework。我有一個UserSerialzer在我serializers.py文件:DjangoRestFramework - 如何將序列化表單傳遞給前端?

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的過程。

+1

我不認爲你的問題是有道理的。 Django的表單主要用於驗證數據。這應該發生在服務器端。它們也可以用來呈現HTML表單,但這不是表單的主要用途。它是您想要發送到前端的呈現的HTML嗎? –

+0

@wobbily_col是的,我有User對象和一個UserSerializer。當向/ users發送POST請求時,視圖會執行「if serializer.is_valid():serializer.save()」。我打算改變這個「如果serializer.is_valid():User.objects.create_user()」,但儘管如此,我想能夠給前端

(其中有用戶名,電子郵件和密碼,並驗證它基於用戶模型的要求),如果用戶點擊提交按鈕,它應該將數據發送給/用戶並創建用戶對象。 – user2719875

+0

@wobbily_colI我注意到默認的DRF API前端(當我訪問/用戶時看到的頁面)有一個表單,當我在視圖中放入「serializer_class = UserSerializer」時會執行此操作。 – user2719875

回答

2

那麼這裏有幾件事我認爲我們可能需要指出。 Django表單通常是您用來創建新用戶的方式,其中包含一個發佈請求,就像您通過DRF嘗試執行的一樣。現在你可以通過DRF做到這一點,但那不是真的,django表單會更適合你的工作。除非你正在構建一個你希望API用戶能夠用來在你的平臺上創建新用戶的API,在這種情況下繼續。我將第一次使用DRF和Angular時使用的教程鏈接起來,或許您會發現它很有幫助。

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

+0

在瀏覽整個互聯網尋找一個可瀏覽api的可行教程後,​​你救了我! – r3ign

相關問題