小编TJB*_*TJB的帖子

为什么即使对象创建失败,Postgres 序列项也会上升?

我有一个 Postgres 项目,其中我的模型之一是Client,只需通过其主键进行索引。我在创建客户端时遇到了问题,因为有人创建了一个客户端,同时显式设置了我读过的主键,这不会影响 Postgres 的客户端序列表,该序列表负责在任何时候自动递增主键 1创建了一个 Client 对象。

我运行了一些 SQL 查询来研究它,发现当前序列值实际上比数据库中客户端的最高 ID 263 低 1,即 262,因此表明 ID 为 263 的客户端已经存在。我尝试在前端应用程序中创建一个客户端,再次收到错误,并决定重新运行查询。我看到数据库中没有像预期的那样创建新客户端,但我也注意到序列值确实达到了 263,因此当我尝试再次创建客户端时,它起作用了!

即使相关模型的创建失败,PostgreSQL 序列表也会递增,这是正常行为吗?如果是这样,这似乎可能会导致一些严重的问题。

postgresql database-sequence

5
推荐指数
1
解决办法
1485
查看次数

将“昨天”字段添加到 Django 管理日期列表过滤器

在我的 Django 应用程序的管理员中,对于我的模型之一,我允许选择按其“create_date”字段进行过滤。Django 默认为我提供了一些选项(今天、过去 7 天、本月、今年)。我也想简单地添加选择“昨天”的选项。我查看了关于同一问题的其他堆栈溢出问题,但他们都在寻找按日期范围搜索的能力,而我只想要一个预加载的选项。他们是否在管理类中配置此模型以覆盖其某些过滤器功能?

管理类

class User_LikeAdmin(admin.ModelAdmin):
    def fb_view_link(self, obj):
        if len(obj.user_facebook_link) > 2:
            return u"<a href='%s' target='_blank'>Facebook Page</a>" % obj.user_facebook_link
        else:
            return ""

    fb_view_link.short_description = ''
    fb_view_link.allow_tags = True


    list_display = ('vehicle', 'user', 'fb_view_link', 'dealer', 'create_date')
    list_filter = ('create_date', ('vehicle__dealer', custom_titled_filter('Dealer')))
    raw_id_fields = ('vehicle', 'user')

    actions = [export_csv]

    def dealer(self, obj):
        return obj.vehicle.dealer
Run Code Online (Sandbox Code Playgroud)

django date admin filter

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

在 Python 中处理深度嵌套字典的便捷方法

我在 python 中有一个深度嵌套的字典,占用了很多空间。有没有办法缩写这样的东西

master_dictionary['sub_categories'][sub_cat_name]['attributes'][attribute_name]['special_type']['nested_children'][child_cat_name][color] = blue
Run Code Online (Sandbox Code Playgroud)

以此为例

nested_child_info[color] = blue
Run Code Online (Sandbox Code Playgroud)

仍然让它编辑字典?我希望这是有道理的。

python dictionary nested shorthand

4
推荐指数
2
解决办法
5160
查看次数

令牌身份验证不适用于 Django Rest 框架

我有一个 Django 应用程序,我将 DRF 用于带有会话和令牌身份验证的 API。我已安装的应用程序中有 rest_framework 和 rest_framework.authtoken。我已经迁移了我的数据库并且可以在 Django Admin 中为用户创建令牌。我知道所有这些都在起作用,因为我正在访问 rest_framework.auth_token 的 acquire_auth_token 视图,以便在 POST 请求中提交用户数据时返回令牌,并收到一个令牌。当我尝试向我的应用程序中的视图函数发出 GET 请求时,该视图函数在其视图集中具有 TokenAuthentication,它不断返回。

{"detail":"Authentication credentials were not provided."}
Run Code Online (Sandbox Code Playgroud)

设置文件

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # My Apps
    'rest_framework',
    'rest_auth',
    'rest_framework.authtoken',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ],
}
Run Code Online (Sandbox Code Playgroud)

网址

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from rest_framework.authtoken import views

from api.views.some_model import MyViewSet

urlpatterns = [
    path('', include(router.urls)),
    path('rest-auth/', include('rest_auth.urls')),
    path('api-token-auth/', views.obtain_auth_token)
] …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework http-token-authentication

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

已安装节点,但不是NPM

我使用brew'brew安装节点'安装了节点,我收到一条警告消息

'Warning: The post-install step did not complete successfully'.
Run Code Online (Sandbox Code Playgroud)

当我输入节点-v时,我确实可以看到当前版本的节点,但是当我尝试找到当前版本的npm时,我得到了这个错误.

-bash: /usr/local/bin/npm: No such file or directory
Run Code Online (Sandbox Code Playgroud)

NPM不存在的原因是因为安装后步骤未成功完成?

shell homebrew node.js npm

3
推荐指数
1
解决办法
529
查看次数

Django - request.session没有被保存

我有一个非常简单的实用函数,如果它们是一个名为'orderId'的会话密钥,它将获得一个开放的Web订单,并且如果没有会话密钥则会创建一个,并且参数'createIfNotFound'在函数中等于true.使用我的调试器逐步执行它我可以看到在创建订单之后设置会话密钥的代码确实会被命中,但是当我检查Http请求对象的会话字段时,它没有该属性?

效用

def get_open_web_order(request, createIfNotFound=False):
    # Check for orderId in session
    order_id = request.session.get('orderId')
    web_order = None

    if None != order_id:
        try:
            web_order = WebOrder.objects.get(id=order_id, status='O')
            logging.info('Found open web order')
        except WebOrder.DoesNotExist:
            logging.info('Web order not found')

    if (None == web_order) and (createIfNotFound == True):
        logging.info('Creating new web order')

        web_order = WebOrder()
        web_order.status = 'O'

        web_order.save()
        request.session['orderId'] = web_order.id

        # Assign logged in user and default billing and shipping
        if request.user.is_authenticated() and hasattr(request.user, 'customer'):
            customer = request.user.customer
            web_order.customer = customer
            web_order.set_defaults_from_customer() …
Run Code Online (Sandbox Code Playgroud)

python django session view

3
推荐指数
1
解决办法
3813
查看次数

是否可以在 Seaborn Facetgrid 中截断空网格?

我正在 Jupyter 笔记本中编写代码,并且有一个 Seaborn facetgrid,我想要 4 列和 3 行。每个图都针对 10 个国家/地区列表中的一个不同国家/地区。由于总共有 12 个网格,而最后两个是空的,有没有办法摆脱最后两个网格?使尺寸为 5 x 2 的解决方案不是一种选择,因为当这么多图被挤在一起时很难看到。

代码:

ucb_w_reindex_age = ucb_w_reindex[np.isfinite(ucb_w_reindex['age'])]
ucb_w_reindex_age = ucb_w_reindex_age.loc[ucb_w_reindex_age['age'] < 120]

def ageSeries(country):
    return ucb_w_reindex_age.loc[ucb_w_reindex_age['country_destination'] == country].age.fillna(value=30).resample('5d').rolling(window=3, min_periods=1).mean()

def avgAge(country):
    return ucb_w_reindex_age.loc[ucb_w_reindex_age['country_destination'] == country].age.mean()

num_plots = 10
fig, axes = plt.subplots(3, 4,figsize=(20, 15))
labels = ["01/10", "09/10", "05/11", "02/12", "10/12", "06/13", "02/14"]

list_of_dfs = [{'country': item, 'age': ageSeries(item), 'avgAge': avgAge(item)} for item in ['US', 'FR', 'AU', 'PT', 'CA', 'DE', 'ES', 'GB', 'IT', 'NL']]

colors = …
Run Code Online (Sandbox Code Playgroud)

matplotlib ipython seaborn facet-grid

3
推荐指数
1
解决办法
969
查看次数

PyPDF2 和从 S3 解码 pdf 文件的问题

我正在尝试获取存储在 AWS 中的 S3 存储桶之一中的 pdf 文件,并获取其一些元数据,例如页数和文件大小。我成功从 S3 存储桶获取 pdf 文件,在调用 print(obj) 时获取此文件

s3.Object(bucket_name='somebucketname', key='somefilename.pdf')
Run Code Online (Sandbox Code Playgroud)

使用 PyPDF2.PdfFileReader() 时,我尝试使用原始文件、UTF-8 解码文件和 ISO-8859-1 解码文件。ISO-8859-1 解码文件是唯一不会引发异常的文件,但是当尝试将其作为参数传递到 PdfFileReader 时,我收到错误,并且此回溯

Traceback (most recent call last):
  File "s3_test.py", line 18, in <module>
    pdfFile = PdfFileReader(parse3)
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1081, in __init__
    fileobj = open(stream, 'rb')
ValueError: embedded null byte
Run Code Online (Sandbox Code Playgroud)

我是否使用了错误的编码类型来解码此 pdf 文件,或者是否像 pdfFileReader 的第一个参数必须是文件路径之类的其他内容?有没有一种更简单的方法来访问 S3 pdf 对象的元数据,而无需费力去实现?

Python脚本

import boto3
from PyPDF2 import PdfReader

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, itemname)
parse3 = obj.get()['Body'].read().decode("ISO-8859-1")
pdfFile = PdfReader(parse3)
Run Code Online (Sandbox Code Playgroud)

python pdf amazon-s3 pypdf amazon-web-services

3
推荐指数
1
解决办法
7153
查看次数

为什么Postgres查询比Redis查询快?

我正在了解 Redis,以及它作为内存数据库的速度有多快。在我的 Django 应用程序中,我有一个包含大约 1500 行的 Postgres 表。该模型只有两个字段“名称”和“发生”。为了测试查询内存不足的对象与从本地数据库(我相信存储在磁盘上)相比,查询速度要快多少,我创建了两个查询

1) 使用 Django 对象管理器通过查询进行简单排序

2) Redis 服务器上的 ZRANGE 命令,从 Redis 排序集中获取相同的项目。

进行两次查询后,我发现从 Redis 排序集中获取相同数量的项目所花费的时间是进行 Postgres 查询所需时间的 250 倍。为什么是这样 ?

脚本

import json
import redis
import datetime

from django.http import HttpResponse
from django.shortcuts import render

from wikipedia.models import Word

redis_server = redis.Redis("localhost")

def get_word_results(request):
    now = datetime.datetime.now()
    words = Word.objects.all().order_by('-occurrence')
    after = datetime.datetime.now()

    diff = (after - now).total_seconds() * 1000
    print(diff)

    rnow = datetime.datetime.now()
    words_redis = redis_server.zrange(name='myzset', start=0, end=-1, withscores=True)
    rafter = datetime.datetime.now() …
Run Code Online (Sandbox Code Playgroud)

django postgresql time redis

3
推荐指数
1
解决办法
3695
查看次数

也停止抽象 django.test TestCase 类运行测试

我正在创建 Django 单元测试,并且有一些具有重复功能的非常相似的模型。但是存在一些差异,因此我创建了一个抽象 BaseTestCase 类,其他 TestCase 类从该类继承。它似乎工作正常,除了当从 BaseTestCase 类继承的 TestCase 完成运行测试时,Django 仍将尝试运行 BaseTestCase 类测试。Django 不应该不想在抽象的 BaseTestCase 上运行测试吗?我是否缺少某种类型的配置以确保不会发生这种情况?

测试用例布局

class BaseTestCase(SetupTestCase):
    api = ""

    def test_obj_list(self):
        response = self.client.get(self.api)

        self.assertTrue(response.status_code == 200)

    def test_obj_create(self):
        pass

    def test_obj_retrieve(self):
        pass

    def test_obj_update(self):
        pass

    def test_obj_delete(self):
        pass

    class Meta:
        abstract = True

class ChildTestCaseOne(BaseTestCase):
    api = "/api/v0.1/path_one/"

class ChildTestCaseTwo(BaseTestCase):
    api = "/api/v0.1/path_two/"

class ChildTestCaseThree(BaseTestCase):
    api = "/api/v0.1/path_three/"

class ChildTestCaseFour(BaseTestCase):
    api = "/api/v0.1/path_four/"

class ChildTestCaseFive(BaseTestCase):
    api = "/api/v0.1/path_five/"
Run Code Online (Sandbox Code Playgroud)

这应该运行 25 个测试,5 个测试用例的 5 个测试,但它运行了 30 …

django abstract-class unit-testing testcase

2
推荐指数
1
解决办法
729
查看次数