小编Mat*_*olz的帖子

Django REST框架:"此字段是必需的." with required = False和unique_together

我想用Django REST Framework保存一个简单的模型.唯一的要求是UserVote.created_byperform_create()方法中自动设置.这个例外失败了:

{
    "created_by": [
        "This field is required."
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想这是因为unique_together索引.

models.py:

class UserVote(models.Model):
    created_by = models.ForeignKey(User, related_name='uservotes')
    rating = models.ForeignKey(Rating)

    class Meta:
        unique_together = ('created_by', 'rating')
Run Code Online (Sandbox Code Playgroud)

serializers.py

class UserVoteSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(read_only=True)
    created_by = UserSerializer(read_only=True)

    class Meta:
        model = UserVote
        fields = ('id', 'rating', 'created_by')
Run Code Online (Sandbox Code Playgroud)

views.py

class UserVoteViewSet(viewsets.ModelViewSet):
    queryset = UserVote.objects.all()
    serializer_class = UserVoteSerializer
    permission_classes = (IsCreatedByOrReadOnly, )

    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)
Run Code Online (Sandbox Code Playgroud)

如何在没有用户提供的情况下将模型保存在DRF中created_by,而是在代码中自动设置此字段?

提前致谢!

python database django unique django-rest-framework

7
推荐指数
2
解决办法
6809
查看次数

如何登录?Django TastyPie与ApiKeyAuthentication实际身份验证过程

我有一个Adobe Air移动应用程序,通过TastyPie与Django通信.要使用该应用程序,人们必须先注册.因此,他们必须提供他们的电子邮件和密码.之后他们就可以"登录"了.我认为最好的想法是,在输入成功的用户名/密码组合后,api-key将被发送回移动应用程序,在那里它将被缓存,因此用户"登录".

如果您认为有更好的方式来注册和"登录"用户,请告诉我.

在Django里面我有一个UserRessource类,用于在通过POST发送数据时注册新用户:

class UserResource(ModelResource):
    class Meta:
        allowed_methods = ['get', 'post']
        queryset = User.objects.all()
        resource_name = 'auth'
        authentication = Authentication()
        authorization = Authorization()
        fields = ['username', 'email']

    def obj_create(self, bundle, request=None, **kwargs):
        username, email, password = bundle.data['username'], bundle.data['password'], bundle.data['password'], 
        try:
            bundle.obj = User.objects.create_user(username, email, password)
        except IntegrityError:
            raise BadRequest('That username already exists')
        return bundle
Run Code Online (Sandbox Code Playgroud)

这非常有效.

但现在我正在努力实际登录过程.在我看来,最好通过GET(和https)向这个资源发送用户名和密码,如果这些是有效的,返回用户api密钥.但这可能吗?它干净吗?如果您向该资源发送GET请求,通常TastyPie将显示当前在数据库中的所有用户.但我不需要那些数据,所以我可能会以某种方式覆盖它.我已经检查了http://django-tastypie.readthedocs.org/en/v0.9.9/resources.html但是我没有让它工作.是否有可能覆盖这种行为?

所以实际问题是什么是使用ApiKeyAuthentication"登录"用户的最佳方式? 而且是我的方法正确,干净或者你有更好的方法?你有这种情况下,任何的例子吗?

非常感谢提前!

authentication django login tastypie

6
推荐指数
1
解决办法
2118
查看次数

uploadcare.com的angularjs数据绑定不起作用

我正在尝试将上传脚本集成到我的页面中.我正在使用uploadcare.com.他们提供了一个简单的指令,但我无法让它工作:

https://github.com/uploadcare/angular-uploadcare/blob/master/angular-uploadcare.js
Run Code Online (Sandbox Code Playgroud)

我正在设置ng-model ="test",在我的控制器中我有以下内容:

angular.module('testApp')
  .controller('MyCtrl', function ($scope) {
    $scope.test = "test";
  });
Run Code Online (Sandbox Code Playgroud)

HTML代码看起来像这样:

<uploadcare-widget ng-model="test" data-public-key="xyz" />
Run Code Online (Sandbox Code Playgroud)

当我检查Firebug时,我可以看到该小部件有效:

<input type="hidden" role="uploadcare-uploader" ng-model="test" data-public-key="6e0958899488d61fd5d0" data-crop="1200:630" value="http://www.ucarecdn.com/ca5513da-90f1-40d1-89e7-648237xxxxxx/-/crop/2560x1344/0,128/-/preview/" class="ng-isolate-scope ng-valid">
Run Code Online (Sandbox Code Playgroud)

但是这个输入值永远不会填充回我的"$ scope.test".这是为什么?当我输出$ scope.test时,它仍然显示"test"而不是我的图像路径值.

data-binding 2-way-object-databinding angularjs

6
推荐指数
1
解决办法
257
查看次数

UncompressableFileError:'scripts/app.js'无法通过COMPRESS_URL('http://my-bucket.s3-us-west-2.amazonaws.com/')访问,无法压缩

我正在尝试将django-compressor和django-storages-redux与django staticfiles和Amazon S3一起使用.这些是我的设置:

STATIC_URL = COMPRESS_URL = 'http://my-bucket.s3-us-west-2.amazonaws.com/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'site-static'),
)

COMPRESS_PRECOMPILERS = (
    ('text/scss', 'sass --scss --compass {infile} {outfile}'),
)

COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter',
]

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = COMPRESS_STORAGE = 'myapp.apps.mymodel.storage.CachedS3BotoStorage'
COMPRESS_OUTPUT_DIR = 'cache'
COMPRESS_ENABLED = False

AWS_S3_HOST = "s3-us-west-2.amazonaws.com"
AWS_ACCESS_KEY_ID = '---'
AWS_SECRET_ACCESS_KEY = '---'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = 'my-bucket.s3-us-west-2.amazonaws.com'
Run Code Online (Sandbox Code Playgroud)

对于静态文件,我使用自定义存储后端,如此处所建议http://django-compressor.readthedocs.org/en/latest/remote-storages/

from django.core.files.storage import get_storage_class
from …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 django-storage django-staticfiles django-compressor

6
推荐指数
1
解决办法
1778
查看次数

按Python中所有项目的数字排序列表

我想按每个项目的数字对列表进行排序.

例:

myCmpItem = '511'
myList = ['111','222','333','444','555','123']

(some magic)

mySortedList = ['111', '222', '333', '123', '444', '555']
Run Code Online (Sandbox Code Playgroud)

算法应如何工作:

  • 将myList中当前项的每个数字与myCmpItem进行比较
    • 对于列表中的第一项,它将是这样的:
    • 5和1之间的差异是4
    • 1和1之间的差值为0
    • 1和1之间的差值为0
    • 这两个数字之间的差异是4(数字比较的总和)
  • 对所有其他项目执行相同操作
  • 按此计算的相似度排序列表

我可以使用很多for循环来编写代码,但实际上我正在寻找一种更快的方法来实现这一点.有没有算法做那样的事情?快速?

进一步的限制

  • 在我的示例中,所有项目的长度均为3,在实际场景中,它们的长度为25
  • 所有项目具有相同的长度,len(myList [x])== 25始终为true
  • 项目可以是字符串,整数,浮点数或任何更适合算法的东西
  • 只有1到5之间的数字

背景

所有项目的数字都是问题的答案,我想找到与给定答案集最相似的答案集.所以"123"表示用户回答问题1 =答案1,问题2 =答案2,问题3 =答案3.它们是多项选择题,总共25个问题(=长度为25),总有5个不同可能回答(这些是数字1-5).

PS:这是我在Stackoverflow上提出的第一个问题所以请与我好心.我已经谷歌搜索了几个小时,但我找不到任何解决方案,所以我在这里问.我希望这很好.英语也不是我的母语.

答案(感谢所有参与者!)

@larsmans的回答(/sf/answers/755350011/)解释了如何以合理的速度解决这个问题.您甚至可以通过提前计算每个数字之间的距离来加速算法,请参阅@ gnibbler的帖子(/sf/answers/755428691/)所有其他答案也很好而且正确,但我发现@larsmans有最好的解释.再次感谢大家的帮助!

python sorting

5
推荐指数
2
解决办法
239
查看次数

在django模板中输出排序的python dict

我有一个python dict,看起来如下(由于隐私原因,重要信息被替换为"xxx").我想在django模板中显示这个dict但它应该是有序的,所以它应该以"A"开头,然后继续用"B"代替"H"

这是我的命令(缩写):

{   'A': [   {'birthday_date': None,
             'first_name': 'Alberto',
             'last_name': 'xxx',
             'name': 'Alberto xxx',
             'uid': xxx},
         {   'birthday_date': None,
             'first_name': 'Antony',
             'last_name': 'xxx',
             'name': 'Antony xxx',
             'uid': xxx}],
'H': [   {   'birthday_date': '08/28',
             'first_name': 'Hitoshi',
             'last_name': 'xxx',
             'name': 'Hitoshi xxx',
             'uid': xxx}],
'C': [   {   'birthday_date': '05/07/1985',
             'first_name': 'Chr',
             'last_name': 'xxx',
             'name': 'Chr xxx',
             'uid': xxx}],
'E': [   {   'birthday_date': None,
             'first_name': 'Edimond',
             'last_name': 'xxx',
             'name': 'Edimond xxx',
             'uid': xxx},
         {   'birthday_date': '08/30',
             'first_name': 'Erika',
             'last_name': 'xxx',
             'name': 'Erika …
Run Code Online (Sandbox Code Playgroud)

python sorting django templates dictionary

3
推荐指数
1
解决办法
3632
查看次数

通用编程算法:仅占所有情况的12%

我正在努力解决一个简单的问题.我有一个功能,我想让它只在我称之为12%的情况下做事.

我已经写了一个有效的功能,但它不够准确.Python中的示例:

// probability to execute the function is 50%
anz_prozent_wahrscheinlichkeit = 50

if anz_prozent_wahrscheinlichkeit == 0:
   print "beep, error"

haeufigkeit = 100 / anz_prozent_wahrscheinlichkeit

// notice: random.randint generates a random number between param 1 and param 2

zufall = random.randint(1, haeufigkeit)

if zufall == 1:
   execute my function()
Run Code Online (Sandbox Code Playgroud)

这适用于百分比,如10%,20%等,但不适用于33%,因为它会四舍五入.

你有什么主意吗?这听起来很简单,但我认为它并非如此微不足道.

提前致谢!

python random algorithm probability

2
推荐指数
2
解决办法
841
查看次数