我有一个Django应用程序,用户发布照片,其他人在照片下留下评论.
留下评论时,我需要通知:
对于(1),我这样做:
#I slice by 25 because I arbitrarily deem anyone beyond that irrelevant.
all_commenter_ids = PhotoComment.objects.filter(which_photo=which_photo).order_by('-id').values_list('submitted_by', flat=True)[:25]
Run Code Online (Sandbox Code Playgroud)
接下来,对于(2),我尝试:
all_relevant_ids = all_commenter_ids.append(which_photo.owner_id)
all_relevant_ids = list(set(all_relevant_ids))
Run Code Online (Sandbox Code Playgroud)
我最终得到一个错误:
'ValuesListQuerySet'对象没有属性'append'
我觉得这很奇怪,因为我正在提取一个values_list.
这不是一个列表对象,在这种情况下,该属性不应该append工作吗?请解释什么是错的,并提出替代方案.
我目前有一个API视图设置如下:
class CartView(APIView):
authentication_classes = [SessionAuthentication, TokenAuthentication]
permission_classes = [IsAuthenticated, ]
api_view = ['GET', 'POST']
def get(self, request, format=None):
try:
cart = request.user.cart
except Cart.DoesNotExist:
cart = Cart.objects.create(user=request.user)
cart_details = cart.cart_details.all()
serializer = CartDetailSerializer(cart_details, many=True, fields=['id', 'item', 'quantity', 'product_type'])
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
这CartDetailSerializer是一个普通的ModelSerializer.
我想分页这个API.但是,在DRF的文档中,我发现了这个:
如果您使用常规APIView,则需要自己调用分页API以确保返回分页响应.
没有关于如何对常规APIView API进行分页的示例.
任何人都可以发布一个我可以在上面的场景中使用的例子.
谢谢.
我正在尝试使用Django Rest Framework和Psycopg2库编写API.此API适用于PostgreSQL数据库.我需要在此数据库中存储2个浮点数组字段,因为API使用2个传感器将数据流式传输到Android应用程序,它们以两个数组存储在APP中,并由JSON发送到API REST.
这些是我的models.py,serializers.py和views_api.py:
Models.py
class DataTest(models.Model):
patient = models.ForeignKey(Patient)
label = models.CharField(max_length=36)
angle_data = ArrayField(models.FloatField())
emg_data = ArrayField(models.FloatField())
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.patient
Run Code Online (Sandbox Code Playgroud)
Serializers.py
class DataTestSerializer(serializers.Serializer):
pk = serializers.IntegerField(read_only=True)
label = serializers.CharField()
angle_data = serializers.ListField(child=serializers.FloatField())
emg_data = serializers.ListField(child=serializers.FloatField())
patient = serializers.PrimaryKeyRelatedField(queryset=Patient.objects.all())
def create(self, validated_data):
return DataTest.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.label = validated_data.get('label', instance.label)
instance.angle_data = validated_data.get('angle_data', instance.angle_data)
instance.emg_data = validated_data.get('emg_data', instance.emg_data)
instance.patient = validated_data.get('patient', instance.patient)
instance.save()
return instance
Run Code Online (Sandbox Code Playgroud)
api.py
class DataTestList(APIView):
def …Run Code Online (Sandbox Code Playgroud) class ChildSerializer(serializers.ModelSerializer):
class Meta:
model = Child
fields = '__all__'
class ParentSerializer(serializers.ModelSerializer):
"""
Serializer for task
"""
def validate_title(self, data):
if not data.get('title'):
raise serializers.ValidationError('Please set title')
return data
Run Code Online (Sandbox Code Playgroud)
Post 时不调用验证函数,另外我如何向 ChildSerializer 提供自定义错误,
我正在运行Spark作业(版本1.2.0),输入的内容是Google Clous存储桶中的文件夹(例如gs:// mybucket / folder)
在Mac机器上本地运行作业时,出现以下错误:
5932 [main]错误com.doit.customer.dataconverter.Phase1-日期作业:2014_09_23失败,错误:方案的无文件系统:gs
我知道要支持gs路径,需要做2件事。一种是安装GCS连接器,另一种是在Hadoop安装的core-site.xml中进行以下设置:
<property>
<name>fs.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
<description>The FileSystem for gs: (GCS) uris.</description>
</property>
<property>
<name>fs.AbstractFileSystem.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
<description>
The AbstractFileSystem for gs: (GCS) uris. Only necessary for use with Hadoop 2.
</description>
</property>
Run Code Online (Sandbox Code Playgroud)
我认为我的问题来自这样一个事实,即我不确定在此本地模式下确切需要在哪里配置每个组件。在Intellij项目中,我正在使用Maven,因此我按以下方式导入了spark库:
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.0</version>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
和Hadoop 1.2.1,如下所示:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>1.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
问题是,我不确定为Spark配置hadoop的位置,以及配置hadoop conf的位置。因此,我可能添加了错误的Hadoop安装。另外,修改文件后是否需要重新启动?据我所知,我的机器上没有运行Hadoop服务。
hadoop google-cloud-storage apache-spark google-hadoop google-cloud-dataproc
我正在使用DRF编写API.我想为我的Modelviewsets中的每个视图赋予不同的权限.我有两个小组(客户和员工).我在permissions.py中将它们过滤为Isstaff和Iscustomer .
class Iscustomer(permissions.BasePermission):
def has_permission(self, request, view):
if request.user and request.user.groups.filter(name='customers'):
return True
return False
class Isstaff(permissions.BasePermission):
def has_permission(self, request, view):
if request.user and request.user.groups.filter(name='staff'):
return True
return False
Run Code Online (Sandbox Code Playgroud)
我试图覆盖使用get_permissions方法.当我放入一个组时self.permission_classes,它工作正常.
class cityviewset(viewsets.ModelViewSet):
queryset = city.objects.all()
serializer_class = citySerializer
def get_permissions(self):
if self.request.method == 'POST' or self.request.method == 'DELETE':
self.permission_classes = [Isstaff]
return super(cityviewset, self).get_permissions()
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将多个组放入时self.permission_classes,它会失败.
def get_permissions(self):
if self.request.method == 'POST' or self.request.method == 'DELETE':
self.permission_classes = [Isstaff,Iscustomer,]
return super(cityviewset, self).get_permissions()
Run Code Online (Sandbox Code Playgroud) django permissions django-permissions django-rest-framework role-based-access-control
我正在使用Django rest framework API,我正在尝试通过first_name或last_name或两者都进行过滤。这是我的ContactViewSet.py:
class ContactViewSet(viewsets.ModelViewSet):
queryset = Contact.objects.all()
serializer_class = ContactSerializer
filter_backends = (DjangoFilterBackend, )
filter_fields = ('first_name', 'last_name')
lookup_field = 'idContact'
Run Code Online (Sandbox Code Playgroud)
我的DRF设置:
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}
Run Code Online (Sandbox Code Playgroud)
我的actuel请求网址如下所示:
http://localhost:8000/api/v1/contacts/?first_name=Clair&last_name=Test
Run Code Online (Sandbox Code Playgroud)
但是我正在寻找这样的东西:
http://localhost:8000/api/v1/contacts/?first_name=Cl**&last_name=Tes**
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激 ..
我想实现一个电子邮件验证,我的工作方式似乎"hacky",但似乎工作得很好.我在函数的返回部分创建了一个自定义响应,但是我一直收到以下错误:
The response content must be rendered before it can be iterated over.
Run Code Online (Sandbox Code Playgroud)
该过程是有人注册的标准,当我去保存用户模型时,我有一个send_mail()功能,用验证密钥发送电子邮件.用户单击该链接并传递密钥,如下所示:
/api/account/verify/849c40665175e56709855cc7aec2b16c05a4d977b3b083790334c6bc01f6e522
Run Code Online (Sandbox Code Playgroud)
在视图中,您可以看到我拉出密钥的位置并处理所有内容.我猜的错误是因为我使用Response()的get_queryset(),但我不知道.如果没有,我该如何创建自定义响应消息?
版本
Python==2.7.10
Django==1.11.4
djangorestframework==3.6.3
Run Code Online (Sandbox Code Playgroud)
模型
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), null=False, unique=True)
first_name = models.TextField(_('first name'), null=False)
last_name = models.TextField(_('last name'), null=False)
is_active = models.BooleanField(_('active'), default=False)
is_admin = models.BooleanField(_('admin'), default=False)
created_on = models.DateTimeField(_('create on'), auto_now_add=True)
updated_on = models.DateTimeField(_('updated on'), auto_now=True)
is_staff = models.BooleanField(_('staff'), default=False)
activation_key = models.CharField(_('email validation key'), default='', max_length=256)
Run Code Online (Sandbox Code Playgroud)
视图
class ActivateViewSet(generics.ListAPIView):
queryset = …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的模型:
class MyModel(models.Model):
thing = models.ForeignKey('Thing')
Run Code Online (Sandbox Code Playgroud)
序列化器和ViewSet如下所示:
class ThingSerializer(serializers.ModelSerializer):
class Meta:
model = Thing
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
Run Code Online (Sandbox Code Playgroud)
对于MyModel列表端点,DRF返回以下对象:
[
{ id: 1, thing: 1 },
{ id: 2, thing: 1 },
{ id: 3, thing: 2 },
{ id: 4, thing: 4 }
]
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉DRF 在仅是ID而非实际相关对象的ForeignKey字段的末尾自动包含“ _id”?例如
[
{ id: 1, thing_id: 1 },
{ id: 2, thing_id: 1 },
{ id: 3, thing_id: 2 }, …Run Code Online (Sandbox Code Playgroud) 我将创建一个必须是远程用户的 Django REST 项目:外部服务器公开身份验证 api 并使用JWT。它也向我公开了一个不记名令牌以允许我使用 api。我的 Django 将不得不公开 api 以供客户端(移动应用程序)进行身份验证。我不太清楚如何处理身份验证流量:我是否必须构建自定义身份验证?
django ×8
python ×4
api ×2
apache-spark ×1
django-orm ×1
hadoop ×1
jwt ×1
permissions ×1
postgresql ×1
precision ×1
psycopg2 ×1