我已经看到了两种方式,但我不明白有什么区别,我应该用什么作为"最佳实践":
def custom_function(**kwargs):
foo = kwargs.pop('foo')
bar = kwargs.pop('bar')
...
def custom_function2(**kwargs):
foo = kwargs.get('foo')
bar = kwargs.get('bar')
...
Run Code Online (Sandbox Code Playgroud) 对于我的应用程序,应该要求用户的电子邮件字段.对于默认的用户模型,情况并非如此.所以我认为创建自定义用户模型是有意义的,如文档中所述:
如果您正在开始一个新项目,强烈建议您设置自定义用户模型,即使默认的用户模型足够您.此模型的行为与默认用户模型相同,但如果需要,您将来可以自定义它:
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
email = models.EmailField(_('email address'), blank=False)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这是否是实现这一目标的正确方法.
原因是这里的Django文档说:
当您想要将一些公共信息放入许多其他模型时,抽象基类非常有用.编写基类并在Meta类中放置abstract = True.然后,此模型不会用于创建任何数据库表.相反,当它用作其他模型的基类时,其字段将添加到子类的字段中.在抽象基类中具有与子项中的字段相同的字段是错误的(并且Django将引发异常).
我现在应该怎么做?
我已经知道如何接收 JSON 对象并自动将其反序列化为所需的格式(例如,使用数据类)。另请参阅:如何在 Ktor 中接收 JSON 对象?
我现在的问题是我想验证 JSON 请求,BadRequest如果它不是所需的格式,则返回,类似于 Django:https : //stackoverflow.com/a/44085405/5005715
我怎样才能在 Ktor/Kotlin 中做到这一点?不幸的是,我在文档中找不到解决方案。此外,必填/可选字段会很好。
我使用以下查询:
def get_queryset(self):
posts = Post.objects.filter(topic_id=OuterRef('pk'))
unread_posts = posts.exclude(read_by=self.request.user)
return Topic.objects.all().annotate(is_unread=Exists(unread_posts),
number_of_replies=Subquery(posts.count())).order_by('-latest_post')
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误消息:
This queryset contains a reference to an outer query and may only be used in a subquery.
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我明确设置了Subquery(posts.count()).
有人可以给我一个提示吗?
这是我的urls.py:
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
如果输入127.0.0.1:8000/polls浏览器(Firefox),我将被重定向至127.0.0.1:8000/polls/(末尾有斜杠)。
老实说,我很困惑为什么会这样。因为在我settings.py那里没有
APPEND_SLASH = True
Run Code Online (Sandbox Code Playgroud)
但是,Django文档说:
APPEND_SLASH
默认值:True
设置为True时,如果请求URL与URLconf中的任何模式都不匹配,并且不以斜杠结尾,则将HTTP重定向发送到同一URL,并附加斜杠。请注意,重定向可能会导致POST请求中提交的所有数据丢失。
来源:https : //docs.djangoproject.com/en/1.11/ref/settings/#append-slash
即使APPEND_SLASH不在,默认情况下它是否也为True settings.py?而且,如果要将其设置为False,则仅应将其放入此文件中?还是该行为的原因是什么?
与英语相比,有两个不同的"版本",你可以用德语与他人交谈.您可以使用正式的,更客观的"Sie"或非正式的,更个性化的"du".
所以,虽然你只是说"你能帮助我吗?" 用英语,你可以说
在德国.
我现在的问题是,对于我的Django应用程序,我想使用第二个版本("du"),因为它更适合我的Web应用程序.事实是,Django(我所知道的?)只支持正式版本,现在我在Web应用程序中存在不一致之处.有时候,你可以阅读"du"和有时"Sie"(来自默认的Django翻译).
当然,我可以用"du"删除我手动添加的句子,但我不喜欢它,因为网页将适用于彼此了解的人.
我的两个问题:
在我的Django应用程序中,我具有以下两个模型:
class Event(models.Model):
capacity = models.PositiveSmallIntegerField()
def get_number_of_registered_tickets():
return EventRegistration.objects.filter(event__exact=self).aggregate(total=Coalesce(Sum('number_tickets'), 0))['total']
class EventRegistration(models.Model):
time = models.DateTimeField(auto_now_add=True)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
number_tickets = models.PositiveSmallIntegerField(validators=[MinValueValidator(1)])
Run Code Online (Sandbox Code Playgroud)
get_number_of_registered_tickets()我需要在应用程序中的多个位置使用该方法(例如,模板渲染)。因此,我认为将其放入模型中也是有意义的,因为它与之相关,而且我经常听到拥有“胖模型和轻量级视图”是一件好事。
我现在的问题:为了防止两个人要为事件注册并联,我必须使用锁。范例:假设还有一张车票要注册。现在,向人们展示在我的网站上,同时单击“注册”。在不幸的情况下,这两个请求都可能是有效的,现在我的注册量超出了容量。
我是Django的新手,但阅读文档后,我认为这select_for_update()应该是解决方案,我在这里吗(我使用PostgreSQL,因此应该受到支持)?
但是,文档还说使用select_for_update()仅在交易中有效。
select_for_update()在支持SELECT ... FOR UPDATE该功能的后端使用自动提交模式评估查询集是TransactionManagementError错误的,因为在这种情况下行未锁定。如果允许,这将促进数据损坏,并且很容易由调用期望在一个事务之外的事务中运行的代码引起。
我现在的想法是更改模型方法get_number_of_registered_tickets()并添加select_for_update():
def get_number_of_registered_tickets():
return EventRegistration.objects.select_for_update().filter(event__exact=self).aggregate(total=Coalesce(Sum('number_tickets'), 0))['total']
Run Code Online (Sandbox Code Playgroud)
现在不同的问题:
select_for_update()正确的解决方案来解决我的问题吗?get_number_of_registered_tickets()鉴于它似乎只能在事务中使用,是否意味着我现在不能在不同的视图/模板中使用该方法?我是否必须在这里违反DRY并将带有select_for_update()的查询复制并粘贴到代码中的其他位置?TransactionManagementError在自动提交模式下(不使用任何事务)不会提高使用时间。是什么原因,或者我误会了什么?作为 Java 和 Kotlin 初学者,我对模块系统很困惑,想知道 Java 和 Kotlin 之间是否有区别。
\n\n到底什么是模块?甲骨文说:
\n\n\n\n\n模块化在包之上添加了更高级别的聚合。关键的新语言元素是模块\xe2\x80\x94a 唯一命名的、可重用的相关包组,以及资源(例如图像和 XML 文件)\n 以及指定的模块描述符
\n\n\n
\n- 模块\xe2\x80\x99s 名称
\n- module\xe2\x80\x99s 依赖项(即该模块依赖的其他模块)
\n- 它显式提供给其他模块使用的包(模块中的所有其他包对其他模块隐式不可用)
\n- 它提供的服务
\n- 它消耗的服务
\n- 它允许反射到哪些其他模块
\n
来源:https://www.oracle.com/corporate/features/understanding-java-9-modules.html
\n\n在 Kotlin 的书中,模块是:
\n\n\n\n\n模块是一组编译在一起的 Kotlin 文件:
\n\n\n
\n- IntelliJ IDEA 模块;
\n- 一个 Maven 项目;
\n- Gradle 源集(测试源集可以访问 main 的内部声明除外);
\n- 通过一次 Ant 任务调用编译的一组文件
\n<kotlinc>。
来源: https: //kotlinlang.org/docs/reference/visibility-modifiers.html#modules
\n\n我的问题:
\n\n目前,我正在研究Kotlin并对序列与收藏有疑问.
我读了一篇关于这个主题的博客文章,在那里你可以找到这段代码片段:
清单实施:
val list = generateSequence(1) { it + 1 }
.take(50_000_000)
.toList()
measure {
list
.filter { it % 3 == 0 }
.average()
}
// 8644 ms
Run Code Online (Sandbox Code Playgroud)
顺序实施:
val sequence = generateSequence(1) { it + 1 }
.take(50_000_000)
measure {
sequence
.filter { it % 3 == 0 }
.average()
}
// 822 ms
Run Code Online (Sandbox Code Playgroud)
这里的要点是Sequence实现速度提高了大约10倍.
但是,我真的不明白为什么.我知道使用序列,你做"懒惰评估",但我找不到任何理由,这有助于减少此示例中的处理.
但是,在这里我知道为什么序列通常更快:
val result = sequenceOf("a", "b", "c")
.map {
println("map: $it")
it.toUpperCase()
}
.any { …Run Code Online (Sandbox Code Playgroud) 我有两个称为Thread和的模型Post。主题有0..*帖子。
现在,我需要一个查询,该查询将按线程中最新发布的日期时间对所有线程进行排序。如果线程中还没有发布,则线程创建的日期时间很重要。
老实说,我对数据库查询有点不知所措。
Thread:
created_at = DateTimeField()
Post
thread = ForeignKey(Thread)
Run Code Online (Sandbox Code Playgroud)
我目前的方法行不通:
newest = Post.objects.filter(thread=OuterRef('pk')).order_by('-created_at')
threads = Thread.objects.annotate(
latest_post=Case(
When(Exists(Subquery(newest.values_list('created_at')[:1])),
then=Value(Subquery(
newest.values_list('created_at')[:1]),
),
default=Value(Thread.created_at)))).order_by('-latest_post')
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
我有一个CustomModel带有IntegerField 的模型。
class CustomModel(models.Model):
count = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
当我CustomModel在admin中创建一个新实例时,我必须进行验证,因此我使用该clean方法并可以访问其中的值。
def clean(self):
value = self.count
...
Run Code Online (Sandbox Code Playgroud)
我的问题:
当我更改CustomModel的实例时,我只能访问更改后的新值,而不能访问原始值。但是,为了进行验证,我必须将新值与实例被编辑之前的值进行比较。
我找不到如何获得访问权限的解决方案。有人知道吗
django ×7
python ×6
kotlin ×3
dictionary ×1
java ×1
json ×1
ktor ×1
python-2.7 ×1
python-3.x ×1
web ×1