我正在尝试创建一个保存对象的视图,但是如果引发一些异常,我想撤消该保存.这是我试过的:
class MyView(View):
@transation.atomic
def post(self, request, *args, **kwargs):
try:
some_object = SomeModel(...)
some_object.save()
if something:
raise exception.NotAcceptable()
# When the workflow comes into this condition, I think the previous save should be undome
# Whant am I missing?
except exception.NotAcceptable, e:
# do something
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?即使引发异常some_object仍然在DataBase中.
我从 django-rest-framework 开始,但找不到从视图中访问 Token 值的方法,这可能吗?我没有使用内置令牌生成器,我使用自定义函数来完成它。在请求的标题中,我给出了这个:
Authorization: 'Token kjansfd98qhr23d09823098fdj'
Run Code Online (Sandbox Code Playgroud)
如何在视图中访问该值?或者也许有使用自定义令牌的最佳方法。
PD:我没有使用 Django 的默认用户模型。
当我尝试访问缓存的URL时,我收到此错误.
我正在使用与Django一起缓存的per-view,当我第一次访问url时它工作正常,但是当它应该在缓存中时返回此错误.我使用FileBasedCache.这是我的设置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES + (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware'
)
Run Code Online (Sandbox Code Playgroud)
在urls.py中是这样的:
...
cache_page(60*1)(MyClaseView.as_view())
...
Run Code Online (Sandbox Code Playgroud)
我已经查阅了目录权限,一切正常,那里有.djcache文件,所以它正在写入
顺便说一句,这个错误来自中间件(process_template_response),我在其中向context_data添加了一些数据.
这是Traceback:
Traceback (most recent call last):
File "/home/nexonet/.virtualenvs/esmidoctor/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 136, in get_response
response = middleware_method(request, response)
File "/home/nexonet/webapps/esmidoctor/esmidoctor/apps/common/middleware/template_article.py", line 12, in process_template_response
response.context_data['template_admin'] = 'panel/content/base.html'
AttributeError: 'TemplateResponse' object has no attribute 'context_data'
Run Code Online (Sandbox Code Playgroud)
提前致谢..!
我个人喜欢使用信号:
from django.db import models
from django.db.models.signals import pre_save
class MyModel(models.Model):
...
def custom_action_before_saving(sender, instance, *args, **kwargs):
...
pre_save.connect(custom_action_before_saving, sender=MyModel)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一些时间或任务更好地覆盖模型类中的save方法:
from django.db import models
class MyModel(models.Model):
...
def save(self):
...
super(MyModel, self).save()
Run Code Online (Sandbox Code Playgroud)
我问这个是因为save()在Django的Documentation页面中有一个覆盖方法(上面提供的链接)的例子,所以我不认为这是一个不好的做法.
我们pre_save()举个例子,文档说:
这是在模型的save()方法的开头发送的.
这是否意味着覆盖save对使用信号的性能具有相同的影响?
有时,当我尝试登录或注册 Facebook 或 Google 时,它会返回一个错误AuthStateForbidden屏幕
但只要刷新页面或过一段时间再试,它就可以正常运行。
我试过添加Google+ APIGoogle 开发人员,但 Facebook 也有同样的问题。
任何的想法?
提前致谢!
前段时间我认为元组的构造函数是一对括号().
例:
>>> (1, )
(1, )
>>> type((1, ))
<type 'tuple'>
>>> t = (1, )
>>> type(t)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
但现在我知道这是逗号,.
所以,做同上面的事情:
>>> 1,
(1,)
>>> type(1,)
<type 'int'> # Why?
>>> 1,2,3
(1,2,3)
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
>>> type(1,2,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: type() argument 1 must be string, not int
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,但是:
>>> t = 1,2,3
>>> type(t)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
最后:
>>> type((1,2,3))
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
这里有一个问题:为什么在最后一个案例中如果元组只是括号需要括号1,2,3?
使用 登录后是否可以重定向到另一个网站python-social-auth?
比方说:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}"></a>
Run Code Online (Sandbox Code Playgroud)
上面的例子是根据文档,它运行良好,但是当我尝试这个时:
<a href="{% url 'social:begin' 'facebook' %}?next=http://www.google.com/"></a>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
http://example.com:8000/accounts/profile/ Not Found
Run Code Online (Sandbox Code Playgroud)
这是有道理的;我没有定义这个 URL
此时我已经登录,但我看到一个错误页面。
但是使用相同的配置,如果我重定向到我自己的网站,这有效,我认为这是有关设置的问题,但我不知道是哪一个。
编辑:
如果我next在第一个配置中删除 GET 参数,它会引发相同的错误。
We've started a new spark cluster on EMR that is running Spark 2.3.0, and are trying to run the same command as on a cluster running Spark 2.2.0, but we are getting the traceback: java.io.IOException: Cannot run program "./venv/bin/python": error=2, No such file or directory.
The command that we are running is:
PYSPARK_PYTHON=./venv/bin/python PYSPARK_DRIVER_PYTHON=python
$SPARK_HOME/bin/spark-submit --py-files=dist/project_main-1.0.0-
py2.7.egg --master=yarn --deploy-mode=client --archives=venv.zip#venv -
-packages org.apache.derby:derbytools:10.14.1.0,org.apache.derby:derbyclient:10.14.1.0,com.github.databricks:spark-avro:204864b6cf,com.databricks:spark-redshift_2.11:3.0.0-preview1,com.databricks:spark-csv_2.11:1.5.0,com.amazon.redshift:redshift-jdbc42:1.2.12.1017 --repositories https://jitpack.io,http://redshift-maven-repository.s3-website-us-east-1.amazonaws.com/release --executor-memory 4g project_main/main.py
Run Code Online (Sandbox Code Playgroud)
We've ensured that the virtualenv is relocatable, and have tried different …
我有一份清单清单
my_list= [
[1,2,3],
[4,5,6],
...
]
Run Code Online (Sandbox Code Playgroud)
我想注释一些像这样的值:
from django.db.models import CharField, Case, When, Value
MyModel.objects.filter(...).annotate(label=Case(When(some_value__in=my_list[0] then=Value('first list')), output_field=CharField()))
Run Code Online (Sandbox Code Playgroud)
现在我需要When为其他列表添加类似的内容my_list,但my_list可能有不同的长度.
我怎么能这样做?
我正在向现有模型添加一个字段:
...
booking_id = models.CharField(null=False, unique=True, max_length=5)
...
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时./manage makemigrations,要求一个默认值。该值是在pre_save信号中创建的。在这种情况下,我应该给出什么作为默认值?
显然,如果我给出一个默认值,当我运行./manage migrate这会引发django.db.utils.IntegrityError
我开始使用Django Rest Framework ,我对Serializers有点困惑,有时调用它来序列化,有时调用反序列化,有时使用data参数调用,有时则不调用。何时以及如何使用序列化器进行序列化和反序列化?
我有一个带有 created_at 字段的客户端模型。我想从 shell 更新客户端的 created_at。我做了以下事情:
>>> c = Client.objects.all()
>>> c[1].created_at
>>> # I get nothing here since it's not set yet
>>> from django.utils import timezone
>>> c[1].created_at = timezone.now()
>>> c[1].save()
>>> c[1].created_at
>>> # I still get nothing here. Even when I reload the queryset, I get nothing.
Run Code Online (Sandbox Code Playgroud)
但是,当我用 做同样的事情时c = Client.object.get(id=1),它就起作用了。为什么会发生这种情况?
django ×10
python ×6
access-token ×1
apache-spark ×1
atomicity ×1
caching ×1
django-orm ×1
emr ×1
pyspark ×1
redirect ×1
transactions ×1