假设我想创建一个基于类的视图,它既可以更新也可以创建一个对象.根据我之前提出的问题,我可以做以下事情之一:
1)使用2周通用的观点CreateView和UpdateView我认为将意味着有两个网址指向两个不同的类.
2)使用继承base的基于类的视图View,我认为这意味着有两个URL指向只有1个类(我创建了哪个继承View).
我有两个问题:
a)哪个更好?
b)ccbv.co.uk显示了一个基础View,但我没有看到记录的任何get,post等方法,这是正确的吗?
JPA是否已经支持处理JSON字段上的查询,如下所示:
select * from person where (info ->> 'age')::numeric = 40;
select * from person where info ->> 'firstName'= 'Cabalo';
Run Code Online (Sandbox Code Playgroud)
我正在使用hibernate 5(在spring-data-jpa之后)和Postgres 9.4
我正在使用Django密码重置.
我在settings.py中有这个代码:
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'myusername@gmail.com'
EMAIL_HOST_PASSWORD = 'mypassword'
DEFAULT_FROM_EMAIL = 'myusername@gmail.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SERVER_EMAIL = 'myusername@gmail.com'
Run Code Online (Sandbox Code Playgroud)
它将我重定向到正确的页面,但它不会发送电子邮件.我检查了垃圾邮件文件夹等,但仍然没有:(
任何想法都非常感谢!
编辑
我试图使用控制台测试它,但我收到以下错误:
>>> email = EmailMessage('Mail test', 'this is a test', to=['myusername@gmail.com'])
>>> email.send()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py", line 255, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py", line 88, in send_messages
new_conn_created = self.open()
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py", line 55, in open
self.connection.login(self.username, self.password) …Run Code Online (Sandbox Code Playgroud) 我必须实现一个容错的搜索功能.
目前,我有以下情况:
楷模:
class Tag(models.Model):
name = models.CharField(max_length=255)
class Illustration(models.Model):
name = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag)
Run Code Online (Sandbox Code Playgroud)
查询:
queryset.annotate(similarity=TrigramSimilarity('name', fulltext) + TrigramSimilarity('tags__name', fulltext))
Run Code Online (Sandbox Code Playgroud)
示例数据:
插图:
ID | Name | Tags |
---|--------|-------------------|
1 | "Dog" | "Animal", "Brown" |
2 | "Cat" | "Animals" |
Run Code Online (Sandbox Code Playgroud)
插图有标签:
ID_Illustration | ID_Tag |
----------------|--------|
1 | 1 |
1 | 2 |
2 | 3 |
Run Code Online (Sandbox Code Playgroud)
标签:
ID_Tag | Name |
-------|----------|
1 | Animal |
2 | Brown |
3 | Animals | …Run Code Online (Sandbox Code Playgroud) 我已将Django配置为使用文件后端在本地计算机上发送电子邮件.这似乎在早期工作正常,所有邮件都记录在我在我的settings.py文件中指定的目录中:
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/code/mails/'
Run Code Online (Sandbox Code Playgroud)
然而,这突然停止了工作.我已经检查了文件夹的权限,这似乎没问题.我没有看到任何错误.我正在使用docker,当我启动Python服务器时,我的终端显示了日志.通常当出现错误时我会在那里看到它.但没有出现.为了测试,我已重命名该文件夹并尝试发送邮件.这次,也没有出现错误.在制作中,我settings.py的不同但其他一切都是相同的,电子邮件发送得很好.所以代码似乎工作,但本地基于文件的后端似乎是一个问题.
有人有什么想法吗?
我已配置这些日志设置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/code/logs/debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
Run Code Online (Sandbox Code Playgroud)
日志似乎工作正常并提供详细的日志记录; 但没有一个与电子邮件错误有关.
我正在尝试创建一个基于类的日志记录处理程序,当应用程序使用django提供的一些内置日志记录配置查看DisallowedHost异常时,它会通知某些第三方服务.
但是,我收到一个特殊的import错误,我无法理解如何解决.
我的settings.py
LOGGING = {
...
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'notify_my_service': {
'level': 'ERROR',
'class': 'tools.exception_logging.NotifyMyServiceHandler'
}
},
'loggers': {
...
'django.security.DisallowedHost': {
'handlers': ['notify_my_service'],
'propagate': False,
},
},
}
Run Code Online (Sandbox Code Playgroud)
我的异常处理程序
import logging
class NotifyMyServiceHandler(logging.handlers.HTTPHandler):
def emit(self, error):
doSomething()
Run Code Online (Sandbox Code Playgroud)
大回溯
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 117, in inner_run
autoreload.raise_last_exception()
File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 250, in raise_last_exception
six.reraise(*_exception)
File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 227, in wrapper
fn(*args, **kwargs) …Run Code Online (Sandbox Code Playgroud) django exception-handling exception django-logging django-1.11
将旧的Django 1.8升级到2.1后,当我尝试登录我的管理站点时,收到404消息:
Using the URLconf defined in <mysite>.urls, Django tried these URL patterns, in this order:
[...]
The current path, login/, didn't match any of these.
Run Code Online (Sandbox Code Playgroud)
我猜这是真的,因为它应该__admin/login像我一样urls.py:
urlpatterns = [
...
path(r'__admin/', admin.site.urls),
...
]
Run Code Online (Sandbox Code Playgroud)
但:
/__admin/login按预期返回登录页面manage.py shell并django.contrib.auth.authenticate() 正常工作Python版本(在VPS上):3.6.7
Django版本(在VPS上):2.1.3(也尝试过2.1.4)
编辑1
我已经注释掉了所有其他内容urls,因此现在唯一可用的URL是__admin.现在,当我登录时,我收到此错误:
Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
1. __admin/
The current path, …Run Code Online (Sandbox Code Playgroud) django django-urls django-admin django-authentication django-settings
假设我有一个具有以下模型定义的事务列表:
class Transaction(models.Model):
amount = models.FloatField()
client = models.ForeignKey(Client)
date = models.DateField()
description = models.CharField()
invoice = models.ForeignKey(Invoice, null=True)
Run Code Online (Sandbox Code Playgroud)
现在我想在月底为每个客户创建发票.发票模型如下所示:
class Invoice(models.Model):
client = models.ForeignKey(Client)
invoice_date = models.DateField()
invoice_number = models.CharField(unique=True)
def amount_due(self):
return self.transaction_set.aggregate(Sum('amount'))
def create_invoices(invoice_date):
for client in Client.objects.all():
transactions = Transaction.objects.filter(client=client)
if transactions.exists():
invoice = Invoice(client=client, number=get_invoice_number(), date=invoice_date)
invoice.save()
transactions.update(invoice=invoice)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过批量创建在1个查询中创建批量创建的所有发票,但我仍然需要单独在交易模型中设置发票字段.
在创建所有发票后,是否可以使用单个查询设置所有交易模型的发票字段?最好在使用ORM时,但如果需要,很乐意使用原始SQL.
我知道我也可以在交易清单上使用逐个客户来获取每个客户的总数,但随后各个条目都没有链接到发票.
我知道如何使用原始PostgreSQL命令执行此操作,但想知道是否有办法使用Django PostgreSQL搜索执行此操作.
class Person(models.Model):
name = models.CharField(max_length=64)
description = models.CharField(max_length=256)
active = models.BooleanField(default=False)
search_vector = SearchVectorField(blank=True)
def update_search(person):
vector = SearchVector('name') + SearchVector('description')
if person.active:
vector = vector + SearchVector('alive')
person.search_vector = vector
Run Code Online (Sandbox Code Playgroud)
django.core.exceptions.FieldError:无法将关键字"alive"解析为字段.
我尝试将'alive'变为@property方法,但看起来它只需要一个db字段进行搜索.
有没有办法在纯Django ORM中执行此操作,还是应该使用原始SQL路由?
django ×8
postgresql ×4
django-email ×2
python ×2
django-1.11 ×1
django-admin ×1
django-orm ×1
django-urls ×1
django-views ×1
email ×1
exception ×1
gmail ×1
hibernate ×1
jpa ×1
jsonb ×1
smtp ×1
sql ×1
trigram ×1