小编Pao*_*rre的帖子

基于Django类的创建和更新视图

假设我想创建一个基于类的视图,它既可以更新可以创建一个对象.根据我之前提出的问题,我可以做以下事情之一:

1)使用2周通用的观点CreateViewUpdateView我认为将意味着有两个网址指向两个不同的类.

2)使用继承base的基于类的视图View,我认为这意味着有两个URL指向只有1个类(我创建了哪个继承View).

我有两个问题:

a)哪个更好?

b)ccbv.co.uk显示了一个基础View,但我没有看到记录的任何get,post等方法,这是正确的吗?

django django-models django-views django-class-based-views

26
推荐指数
4
解决办法
1万
查看次数

JPA支持查询Postgres JSON字段

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

postgresql hibernate jpa jsonb

17
推荐指数
1
解决办法
2705
查看次数

Django:重置密码不发送电子邮件

我正在使用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)

django gmail smtp django-authentication django-email

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

来自ManyToManyField的Django最大相似度(TrigramSimilarity)

我必须实现一个容错的搜索功能.
目前,我有以下情况:

楷模:

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)

python django postgresql django-queryset trigram

8
推荐指数
1
解决办法
1427
查看次数

Django邮件未被保存(文件后端)

我已将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)

日志似乎工作正常并提供详细的日志记录; 但没有一个与电子邮件错误有关.

python email django django-email django-settings

8
推荐指数
1
解决办法
605
查看次数

创建自定义django日志记录处理程序.'module'对象没有属性'handlers'

我正在尝试创建一个基于类的日志记录处理程序,当应用程序使用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

7
推荐指数
1
解决办法
272
查看次数

Django管理员升级到2.1后无法登录

将旧的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)

但:

  • GET请求/__admin/login按预期返回登录页面
  • 问题仅发生在生产中(在VPS上有乘客WSGI),而不是在localhost上
  • 通过手动登录用户manage.py shelldjango.contrib.auth.authenticate() 正常工作
  • 不幸的是,升级发生在VPS机器中的迁移的同时,因此数据库也可能存在问题.

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

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

使用分组在Django中进行条件批量更新

假设我有一个具有以下模型定义的事务列表:

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.

我知道我也可以在交易清单上使用逐个客户来获取每个客户的总数,但随后各个条目都没有链接到发票.

sql django postgresql django-models django-orm

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

是否可以将自己的字符串添加到Django SearchVectorField?

我知道如何使用原始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 postgresql full-text-search

4
推荐指数
1
解决办法
279
查看次数