以Django为例,在manage.py
:
try:
import settings
except ImportError:
sys.stderr.write("Error: Can't find the file 'settings.py'...")
Run Code Online (Sandbox Code Playgroud)
看似合法,但settings
进口时会发生什么non_existant_lib_foo
?
好吧,你被追捕了所有你可以做的事情PATH
,等等.
当然,您可以使用except ImportError as e:
并打印出实际的错误消息,但如果您只想捕获特定错误并提供一些非常好的建议,如上所述,该怎么办?
您或多或少地使用正则表达式,或者最好猜测"正确"模块导入失败,然后显示消息.
有没有更好的方法来处理这个?
当使用Django(使用SQLite3)时,我注意到以下查询connection.queries
:
"sql": "SELECT (1) AS \"a\" FROM \"blog_comment\" WHERE \"blog_comment\".\"id\" = 5 LIMIT 1"
Run Code Online (Sandbox Code Playgroud)
我明白什么该做查询(只是从每个匹配行返回的第一列),但为什么要这样做呢?
它只是在SQLite3中检查EXISTS的廉价方法吗?如果是这样,它将在什么情况下单独使用?
我有一个带嵌套链接的div.div有一个delegate
处理程序'click'
,用于警告"Div".div中的链接还有一个delegate
处理程序,用于在警告"链接"之前调用'click'
其中e.preventDefault();
.当我点击链接时,我会看到"Div"警报和"Div"警报.我不清楚为什么会发生这种情况,因为我试图阻止链接点击处理程序的传播.
$('body').delegate('.outer', 'click', function(e){
e.preventDefault();
alert('Div');
});
$('body').delegate('.outer a', 'click', function(e){
e.preventDefault();
alert('Link');
// Note: I've also tried returning false (vs using preventDefault), per the docs
});
Run Code Online (Sandbox Code Playgroud)
<div class="outer">
<a href="#">Click me</a>
</div>
Run Code Online (Sandbox Code Playgroud) 注意:我使用的是 Postgres 9.x 和 Django ORM
我的应用程序中有一些函数可以打开事务,运行一些查询,然后执行几秒钟的其他操作(第 3 方 API 访问等),然后再运行一些查询。这些查询并不是很昂贵,但我一直担心,由于打开了许多事务这么长时间,我最终会以某种方式使我的数据库陷入困境或耗尽连接或其他什么。就性能而言,这有多大影响?
我注意到Postgres现在具有内置复制功能,包括同步复制,流复制和其他一些变体.它甚至可以为应用程序级别的特定操作提供控制同步的能力(例如,对于诸如汇款等重要事项使用同步,但可能不会用于诸如用户评论之类的不太重要的事情等)
我正在使用Django 1.5(即dev)开发软件,并且可能需要同步复制(将继续进行与商业相关的事务).
您是否认为内置工具在大多数情况下最适合工作,您是否对内置复制的一种变体与另一种变体,易用性,质量等有任何想法?
最后一件事; Slony和PGPool II似乎非常流行(特别是Slony)用于复制.有没有A)特定的技术原因,因为它们比内置复制更受欢迎,或者B)是因为很多人使用的是没有内置复制的版本,或者C)我是否曾经在岩石下和PG内置复制已经非常流行?
我只有2台物理服务器,它们位于同一个机架中.我的目的是提供一个可以自动变成主机的从机,如果在一台机器上发生了某些特定的错误(或者甚至是像双电源故障那样简单的事情等).我不介意我的客户在自动故障转移期间遇到停机时间,只要停机时间是几分钟左右,而不是一小时或者其他什么.
我希望零数据丢失,并愿意在故障转移过程中牺牲更多时间.有没有办法在不进行同步复制的情况下进行这种交易(例如,没有回写确认的流式传输日志)?
您会推荐什么策略或复制变体?
我们用 Postgres 8.4 处理这个问题的方法是手动更新pg_attribute
表:
LOCK TABLE pg_attribute IN EXCLUSIVE MODE;
UPDATE pg_attribute SET atttypmod = 104
WHERE attrelid = 'table_name'::regclass AND
attname = 'column_name';
Run Code Online (Sandbox Code Playgroud)
column_name
是 avarchar(50)
并且我们想要 a varchar(100)
,但是该表太大(数千万行)并且过于频繁地用于重写。
围绕这个主题的内容和答案对于这样一个(至少是轶事)常见问题来说是稀疏和过时的。
但是,在看到至少 3 次讨论可能是这种情况的提示后,我开始认为使用较新版本的 Postgres(我们在 9.6 上),您现在可以运行以下命令:
ALTER TABLE 'table_name' ALTER COLUMN 'column_name' TYPE varchar(100);
Run Code Online (Sandbox Code Playgroud)
...无需重写表格。
这样对吗?
如果是这样,您是否知道 Postgres 文档中存在有关该主题的某些明确信息?
我有以下内容:
class AccountAdmin(models.Model):
account = models.ForeignKey(Account)
is_master = models.BooleanField()
name = models.CharField(max_length=255)
email = models.EmailField()
class Meta:
unique_together = (('Account', 'is_master'), ('Account', 'username'),)
Run Code Online (Sandbox Code Playgroud)
如果我然后在同一个帐户上创建一个与另一个用户名相同的新AccountAdmin,而不是让我在模板中显示错误,则会出现IntegrityError,页面就会中断.我希望在我看来,我可以去:
if new_accountadmin_form.is_valid():
new_accountadmin_form.save()
Run Code Online (Sandbox Code Playgroud)
我该如何克服这个问题.是否有第二种is_valid()
类型的方法检查数据库是否违反了该unique_together = (('Account', 'is_master'), ('Account', 'username'),)
部分?
我不想在我的视图中捕获IntegrityError.那个域逻辑与表示逻辑混合在一起.它违反DRY,因为如果我在2页上显示相同的表格,我将不得不重复相同的块.它也违反了DRY,因为如果我有两种形式用于同一件事,我必须写相同的,除了:再次.
我有一个应用程序,让人们创建票证,每个帐户所有者使用我的应用程序可以创建票证.
首先,您认为每个帐户应该是唯一的吗?或者,它应该是完全独特的吗?
像这样:
class Ticket(models.Model):
"""
An ticket created by an Account holder.
"""
account = models.OneToOneField('Account')
number = models.CharField(max_length=20, verbose_name='Ticket Number')
class Meta:
unique_together = (('account', 'number'),)
Run Code Online (Sandbox Code Playgroud)
或者这个,分别是:
class Ticket(models.Model):
"""
An ticket created by an Account holder.
"""
account = models.OneToOneField('Account')
number = models.CharField(unique=True, max_length=20, verbose_name='Ticket Number')
Run Code Online (Sandbox Code Playgroud)
然后,当然我希望订单号代表帐户,因此可能是具有id:"chris"的帐户的样本订单号可以是"chris-41984"或类似的东西.你会为此创建一个模型方法,还是......?
我以为我理解装饰者但不再理解了.装饰器只在创建函数时起作用吗?
我想创建一系列函数,这些函数都有一个名为'ticket_params'的必需参数,这是一个字典.然后用类似的东西装饰它们@param_checker(['req_param_1', 'req_param_2'])
然后如果'req_param_1'和'req_param_2'不在字典中,则引发一个自定义的Exception子类.我觉得这一切都错了吗?
在调用代码中会是这样的:
@param_checker(['req_param_1', 'req_param_2'])
def my_decorated_function(params):
# do stuff
params = {'req_param_1': 'Some Value'}
my_decorated_function(params)
# exception would be raised here from decorator.
Run Code Online (Sandbox Code Playgroud) 我在Windows XP上安装了最新的Python 2.6(开发服务器一直在工作到昨晚).我有路径和Python路径的东西都设置,我的开发服务器已经永远工作.我最近用Django主干的新拉取代了我的django-trunk.我想也许有一个导入错误或Django在我的应用程序的models.py中没有捕获到的东西所以我开始了一个新项目(空的但仅用于测试)但它仍然无效.我重新启动了我的计算机并再次尝试了新的空应用程序python manage.py runserver 8080
然后继续http://127.0.0.1:8080/
工作("恭喜.Django是insta ......").所以我将CD转到我的真实项目并再次尝试,但它没有用.我没有得到堆栈跟踪或类似的东西.[17/Ja/2010 16:30:51] "GET / HTTP/1.1" 301 0
我访问时要么得到输出http://127.0.0.1:8080/
在我的CMD提示中或我什么也得不到(即使我很难刷新等).这可能是什么?
更新(重要):
Firefox can't find the server at www.127.0.0.1.
即使我在,Firefox告诉我http://127.0.0.1:8080/
.这是否意味着Django真的因为其他原因向www.127.0.0.1发送了301?
我PREPEND_WWW
从settings.py中删除了,甚至删除了settings.py中安装的所有应用程序(django admin和预设的应用程序除外).
更新2:它适用于Safari!怎么会这样?这就像Firefox正在获得某种301,但Safari工作得很好.
django ×6
python ×4
postgresql ×3
database ×1
ddl ×1
decorator ×1
django-urls ×1
django-views ×1
exception ×1
firefox ×1
javascript ×1
jquery ×1
sql ×1
sqlite ×1
transactions ×1
varchar ×1