我想用Django REST Framework保存一个简单的模型.唯一的要求是UserVote.created_by在perform_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,而是在代码中自动设置此字段?
提前致谢!
我有一个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"登录"用户的最佳方式? 而且是我的方法正确,干净或者你有更好的方法?和你有这种情况下,任何的例子吗?
非常感谢提前!
我正在尝试将上传脚本集成到我的页面中.我正在使用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"而不是我的图像路径值.
我正在尝试将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
例:
myCmpItem = '511'
myList = ['111','222','333','444','555','123']
(some magic)
mySortedList = ['111', '222', '333', '123', '444', '555']
Run Code Online (Sandbox Code Playgroud)
我可以使用很多for循环来编写代码,但实际上我正在寻找一种更快的方法来实现这一点.有没有算法做那样的事情?快速?
所有项目的数字都是问题的答案,我想找到与给定答案集最相似的答案集.所以"123"表示用户回答问题1 =答案1,问题2 =答案2,问题3 =答案3.它们是多项选择题,总共25个问题(=长度为25),总有5个不同可能回答(这些是数字1-5).
PS:这是我在Stackoverflow上提出的第一个问题所以请与我好心.我已经谷歌搜索了几个小时,但我找不到任何解决方案,所以我在这里问.我希望这很好.英语也不是我的母语.
@larsmans的回答(/sf/answers/755350011/)解释了如何以合理的速度解决这个问题.您甚至可以通过提前计算每个数字之间的距离来加速算法,请参阅@ gnibbler的帖子(/sf/answers/755428691/)所有其他答案也很好而且正确,但我发现@larsmans有最好的解释.再次感谢大家的帮助!
我有一个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) 我正在努力解决一个简单的问题.我有一个功能,我想让它只在我称之为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%,因为它会四舍五入.
你有什么主意吗?这听起来很简单,但我认为它并非如此微不足道.
提前致谢!
django ×4
python ×4
sorting ×2
algorithm ×1
amazon-s3 ×1
angularjs ×1
data-binding ×1
database ×1
dictionary ×1
login ×1
probability ×1
random ×1
tastypie ×1
templates ×1
unique ×1