在django rest框架中获取当前用户
我在获取当前用户在django rest框架中上传图像时遇到了很多麻烦。在django rest框架中获取当前用户
Django rest框架是用于网页的纯django内的应用程序。
我使用django rest框架,以便用户可以上传我们的服务器上的文件......除了我们需要知道谁是上传它的用户,一切都很好。我真的尝试过很多这个网站和谷歌提供的解决方案,但只是无法实现。这是来自应用程序的代码。我们该做什么?
viewset.py
from rest_framework import viewsets, filters
from api.serializers import UploadedImageSerializer # import our serializer
from api.models import UploadedImage # import our model
class UploadedImagesViewSet(viewsets.ModelViewSet):
queryset = UploadedImage.objects.order_by('-id')[:1]
serializer_class = UploadedImageSerializer
serializer.py
from rest_framework import serializers
from api.models import UploadedImage # Import our UploadedImage model
class UploadedImageSerializer(serializers.ModelSerializer):
# Create a custom method field
# current_user = serializers.SerializerMethodField('_user')
class Meta:
model = UploadedImage
fields = ('id', 'image','name','Tip','curent_user') # only serialize the primary key and the image field
models.py
from django.db import models
import uuid,os
import sqlite3
import Function1
import Function2
from django.contrib.auth.models import User
def scramble_uploaded_filename(instance, filename):
extension = filename.split(".")[-1]
return "{}.{}".format(uuid.uuid4(), extension)
def filename(instance, filename):
return filename
# Our main model: Uploaded Image
class UploadedImage(models.Model):
image = models.ImageField("Uploaded image",upload_to=scramble_uploaded_filename)
Tip = models.IntegerField("Captcha type")
curent_user = models.CharField("Curent user",editable=False,max_length=100,default='')
def filen(self) :
path = self.image.path
tip = self.Tip
writez = Function1.File_input(path,tip)
text = Function2.File_input (writez,0.83,tip)
return text
name = filen
views.py
from rest_framework import viewsets
from api.serializers import UploadedImageSerializer
from api.models import UploadedImage
class UploadViewSet(viewsets.ModelViewSet):
"""
API endpoint
"""
queryset = UploadedImage.objects.all()
serializer_class = UploadedImageSerializer
这对我有用。你在上传类(在我的例子中为Post)中创建一个ForeignKey并将其链接到用户(不要忘记进行迁移和迁移)。在您的视图中,当您呈现表单时,请使用instance = form.save(commit = False)
- >instance.uploaded_by = request.user
- >instance.save()
,以便抓取当前用户及其保存在发布(上传)模型中的用户。
views.py:
def upload(request):
form = PostForm(request.POST or None, request.FILES or None)
if form.is_valid():
instance = form.save(commit = False)
instance.uploaded_by = request.user
instance.save()
form.save_m2m()
models.py:
class Post(models.Model):
uploaded_by = models.ForeignKey('auth.User',default=1,related_name='uploads')
...
要看到,你会在你的应用程序admin.py安装现场 “uploaded_by” 管理员用户。我假设你知道如何不谷歌将帮助你;) 希望有所帮助。
在我的项目中,我使用HiddenField填充当前用户。例如你的情况:
class UploadedImageSerializer(serializers.ModelSerializer):
current_user = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = UploadedImage
fields = ('id', 'image','name','Tip','current_user')
你的代码和@hansTheFranz的组合对我来说是一种胜利的解决方案。 TNX –
我的代码有了一些进步,它帮助我理解了它的工作原理。我找到后我会回复你。 Ty为您提供帮助。 –
我做了tnx人! –
所以它显示在管理员?你写的其他评论是什么?有麻烦的ID?听起来像你需要定义def'__str __(self): \t \t返回模型中的self.user.userprofile.name'。我的代码是否为您提供解决方案,或者您找到了自己的解决方案?无论如何,我很高兴你做到了。 – hansTheFranz