如何被授权使用 django rest framework 和 CreateAPIView 创建对象?
how to be authorized to create an object using django rest framework and CreateAPIView?
当我想使用 CreateAPIView 创建对象时遇到问题,我收到消息:
"detail": "Authentication credentials were not provided.".
我使用 rest-auth 和 rest-authtoken 应用程序。
这是我目前所做的:
models.py
class CustomUser(AbstractUser):
objects = CustomUserManager()
is_normal_user = models.BooleanField(default=False)
is_corporate_user = models.BooleanField(default=False)
class CompanyProfile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
corporate_name = models.CharField(max_length=30)
serializers.py
class CompanyProfileSerializer(serializers.ModelSerializer):
class Meta:
model = CompanyProfile
fields = ['user', 'corporate_name',]
read_only_fields = ('id',)
views.py
class Authorized_Company_User(permissions.BasePermission):
def has_permission(self, request, view):
return bool(request.user and request.user.is_corporate_user)
class CompanyCreateProfileView(generics.CreateAPIView):
#queryset = CompanyProfile.objects.all()
serializer_class = CompanyProfileSerializer
#authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated, Authorized_Company_User)
请问是否需要定义create函数,使用get方法获取用户authtoken
"detail": "Authentication credentials were not provided."
此消息是由 permission_classes = IsAuthenticated
您需要提供一个 Token 才能创建。
从 rest_auth 添加这个 url 应用:
re_path(r'^rest_auth/',include('rest_auth.urls'))
然后就可以使用postman做测试了
method :POST
url: http://127.0.0.1:8000/rest_auth/login/
body: {"username":"user", "password":"password"}
headers: Content-Type: Application/json
作为回应你得到
`{"key":"here your token"}`
使用此令牌您可以添加新用户
method :POST
url: http://127.0.0.1:8000/add_user_url/
body: {"corporate_name":"corporate"}
headers: Content-Type: Application/json
Authorization: "Token ########here your token########"
并且在您的 CreateAPIView 中,您可以分配用户:
class CompanyCreateProfileView(generics.CreateAPIView):
def perform_create(self, serializer):
serializer.save(user=self.request.user)
当我想使用 CreateAPIView 创建对象时遇到问题,我收到消息: "detail": "Authentication credentials were not provided.".
我使用 rest-auth 和 rest-authtoken 应用程序。
这是我目前所做的:
models.py
class CustomUser(AbstractUser):
objects = CustomUserManager()
is_normal_user = models.BooleanField(default=False)
is_corporate_user = models.BooleanField(default=False)
class CompanyProfile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
corporate_name = models.CharField(max_length=30)
serializers.py
class CompanyProfileSerializer(serializers.ModelSerializer):
class Meta:
model = CompanyProfile
fields = ['user', 'corporate_name',]
read_only_fields = ('id',)
views.py
class Authorized_Company_User(permissions.BasePermission):
def has_permission(self, request, view):
return bool(request.user and request.user.is_corporate_user)
class CompanyCreateProfileView(generics.CreateAPIView):
#queryset = CompanyProfile.objects.all()
serializer_class = CompanyProfileSerializer
#authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated, Authorized_Company_User)
请问是否需要定义create函数,使用get方法获取用户authtoken
"detail": "Authentication credentials were not provided."
此消息是由 permission_classes = IsAuthenticated
您需要提供一个 Token 才能创建。
从 rest_auth 添加这个 url 应用:
re_path(r'^rest_auth/',include('rest_auth.urls'))
然后就可以使用postman做测试了
method :POST
url: http://127.0.0.1:8000/rest_auth/login/
body: {"username":"user", "password":"password"}
headers: Content-Type: Application/json
作为回应你得到
`{"key":"here your token"}`
使用此令牌您可以添加新用户
method :POST
url: http://127.0.0.1:8000/add_user_url/
body: {"corporate_name":"corporate"}
headers: Content-Type: Application/json
Authorization: "Token ########here your token########"
并且在您的 CreateAPIView 中,您可以分配用户:
class CompanyCreateProfileView(generics.CreateAPIView):
def perform_create(self, serializer):
serializer.save(user=self.request.user)