我有一个 Postgres 项目,其中我的模型之一是Client,只需通过其主键进行索引。我在创建客户端时遇到了问题,因为有人创建了一个客户端,同时显式设置了我读过的主键,这不会影响 Postgres 的客户端序列表,该序列表负责在任何时候自动递增主键 1创建了一个 Client 对象。
我运行了一些 SQL 查询来研究它,发现当前序列值实际上比数据库中客户端的最高 ID 263 低 1,即 262,因此表明 ID 为 263 的客户端已经存在。我尝试在前端应用程序中创建一个客户端,再次收到错误,并决定重新运行查询。我看到数据库中没有像预期的那样创建新客户端,但我也注意到序列值确实达到了 263,因此当我尝试再次创建客户端时,它起作用了!
即使相关模型的创建失败,PostgreSQL 序列表也会递增,这是正常行为吗?如果是这样,这似乎可能会导致一些严重的问题。
在我的 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) 我在 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)
仍然让它编辑字典?我希望这是有道理的。
我有一个 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
我使用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不存在的原因是因为安装后步骤未成功完成?
我有一个非常简单的实用函数,如果它们是一个名为'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) 我正在 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) 我正在尝试获取存储在 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) 我正在了解 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 单元测试,并且有一些具有重复功能的非常相似的模型。但是存在一些差异,因此我创建了一个抽象 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 …