Python Django Rest API:使用令牌身份验证将当前用户添加到用户字段
要求:Python Django Rest API:使用令牌身份验证将当前用户添加到用户字段,python,django,django-rest-framework,jwt,Python,Django,Django Rest Framework,Jwt,要求: Python 3.7 Django 2.0 我正在处理我的Django Rest API,我想在创建对象但不知道时将当前用户添加到我的用户字段中 我正在对API Rest使用JWT身份验证 我回答了这个问题: 但它似乎与我的代码不兼容 我有我的序列化程序.py文件: class IndividuCreateSerializer(serializers.ModelSerializer) : class Meta : model = Individu
Python 3.7
Django 2.0
我正在处理我的Django Rest API
,我想在创建对象但不知道时将当前用户添加到我的用户字段中
我正在对API Rest使用JWT身份验证
我回答了这个问题:
但它似乎与我的代码不兼容
我有我的序列化程序.py文件:
class IndividuCreateSerializer(serializers.ModelSerializer) :
class Meta :
model = Individu
fields = [
'Etat',
'Civilite',
'Nom',
'Prenom',
'Sexe',
'Statut',
'DateNaissance',
'VilleNaissance',
'PaysNaissance',
'Nationalite1',
'Nationalite2',
'Profession',
'Adresse',
'Ville',
'Zip',
'Pays',
'Mail',
'Telephone',
'Utilisateur',
'Image',
'CarteIdentite',
]
def create(self, validated_data):
obj = Individu.objects.create(**validated_data)
Identity_Individu_Resume(self.context.get('request'), obj.id)
return obj
class IndividuCreateAPIView(CreateAPIView) :
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
queryset = Individu.objects.all()
serializer_class = IndividuCreateSerializer
def user_create(self,serializer):
serializer.validated_data['Utilisateur'] = self.request.user
return super(IndividuCreateAPIView, self).user_create(serializer)
和我的/Api/views.py文件:
class IndividuCreateSerializer(serializers.ModelSerializer) :
class Meta :
model = Individu
fields = [
'Etat',
'Civilite',
'Nom',
'Prenom',
'Sexe',
'Statut',
'DateNaissance',
'VilleNaissance',
'PaysNaissance',
'Nationalite1',
'Nationalite2',
'Profession',
'Adresse',
'Ville',
'Zip',
'Pays',
'Mail',
'Telephone',
'Utilisateur',
'Image',
'CarteIdentite',
]
def create(self, validated_data):
obj = Individu.objects.create(**validated_data)
Identity_Individu_Resume(self.context.get('request'), obj.id)
return obj
class IndividuCreateAPIView(CreateAPIView) :
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
queryset = Individu.objects.all()
serializer_class = IndividuCreateSerializer
def user_create(self,serializer):
serializer.validated_data['Utilisateur'] = self.request.user
return super(IndividuCreateAPIView, self).user_create(serializer)
为了尝试我的API,我配置了一个pythonic文件,它与其他web应用程序的工作相同
此文件看起来像:
import requests
mytoken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6IkFkbWluIiwiZXhwIjoxNTE5Mzc4MDExLCJlbWFpbCI6InZhbGVudGluQGRhdGFzeXN0ZW1zLmZyIiwib3JpZ19pYXQiOjE1MTkzNzQ0MTF9.7AKpbNEcdir2FLU064QzwwZGiylV-P7LBm1nOJIekwE"
url = 'http://localhost:8000/Api/Identification/create/'
filename1 = '/Users/valentin/Desktop/Django/DatasystemsCORE/Media/pictures/photo.jpg'
filename2 = '/Users/valentin/Desktop/Django/DatasystemsCORE/Media/Carte_Identite/carte_ID.gif'
files = {'Image' : open(filename1,'rb'), 'CarteIdentite': open(filename2,'rb')}
data = {
"Etat": "Vivant",
"Civilite": "Monsieur",
"Nom": "creation",
"Prenom": "via-api",
"Sexe": "Masculin",
"Statut": "Célibataire",
"DateNaissance": "1991-11-23",
"VilleNaissance": "STRASBOURG",
"PaysNaissance": "FR",
"Nationalite1": "FRANCAISE",
"Nationalite2": "",
"Profession": "JJJ",
"Adresse": "12, rue des fleurs",
"Ville": "STRASBOURG",
"Zip": 67000,
"Pays": "FR",
"Mail": "",
"Telephone": ""
}
response = requests.post(url, files=files, data=data, headers={'Authorization': 'JWT {}'.format(mytoken)})
print(response.text)
我的对象创建良好,但我的用户字段为空。
我如何编写此代码以便将当前用户添加到用户字段中
谢谢大家! 您可以将当前用户直接传递到序列化程序的save方法内部视图:
class IndividuCreateAPIView(CreateAPIView) :
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
queryset = Individu.objects.all()
serializer_class = IndividuCreateSerializer
def perform_create(self,serializer):
serializer.save(Utilisateur=self.request.user)
您可以将当前用户直接传递到序列化程序的内部视图中的save方法:
class IndividuCreateAPIView(CreateAPIView) :
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
queryset = Individu.objects.all()
serializer_class = IndividuCreateSerializer
def perform_create(self,serializer):
serializer.save(Utilisateur=self.request.user)
您可以将其他参数传递给序列化程序的save方法。这里的检查示例:我试图编写以下代码:
defsave(self):返回{'usilisateur':self.request.user}
,但它似乎不起作用。我正在搜索Yet您需要将其作为视图的create
方法中的save
参数传递。您可以将其他参数传递给序列化程序的save方法。这里的检查示例:我试图编写以下代码:defsave(self):返回{'usilisateur':self.request.user}
,但它似乎不起作用。我正在搜索Yet您需要将其作为视图的create
方法中的save
参数传递。我尝试了,但用户字段仍然没有填充。根据我的authentificate方法,是否有可能出现此问题?@Deadpool Isusilimateur
您是否试图填写此字段?或者您有其他型号的字段用户
?在这种情况下,您需要将此字段添加到序列化程序中,并将用户作为save的kwargserializer.save(user=self.request.user)传递给save。
@Deadpool您的用户是否经过身份验证?如果添加打印(self.request.user
toperform\u create
你看到匿名用户的用户实例了吗?我的用户通过JWT进行了身份验证。因此我假设他通过python文件中的相关令牌进行了很好的身份验证。我犯了一个错误,将perform\u create
写入了错误的位置!你的脚本似乎工作得很好!非常感谢!我将把我的项目作为一个开源项目,我正在搜索Django Developer,以便与我一起改进这个软件;)我尝试过,但用户字段仍然没有填充。根据我的authentificate方法,是否有可能出现此问题?@Deadpool是usilimateur
是您尝试填充的字段?或者您有其他模型的字段User
?在这种情况下,您需要将此字段添加到序列化程序中,并将用户作为save的kwargserializer.save传递给用户(user=self.request.user)
@Deadpool您的用户是否经过身份验证?如果添加打印(self.request.user
toperform\u create
你看到匿名用户的用户实例了吗?我的用户通过JWT进行了身份验证。因此我假设他通过python文件中的相关令牌进行了很好的身份验证。我犯了一个错误,将perform\u create
写入了错误的位置!你的脚本似乎工作得很好!非常感谢!我将把我的项目作为一个开源项目,我正在搜索Django Developer,以便与我一起改进这个软件;)