我有一个SaaS宠物项目用于开发票.在这里面,我想我的客户每票号1001开始很显然,我不能在Postgres的用一个简单的汽车领域,只是加1000的值,因为我所有的客户端将共享同一个数据库和同一个tickets
表.我尝试使用整数列类型和查询(伪SQL)SELECT LATEST number FROM tickets WHERE client_id = [current client ID]
来获取最新的数字,然后使用该数字+ 1
来获取下一个数字number
.问题在于,通过并发,两张票很容易以这种方式以相同的数字结尾.我需要能够在Django中或使用原始SQL(使用Bash或其他任何类型)执行此操作的数字.
我不是在寻找一种强迫我的榜样工作的方法.我只是在寻找一个解决方案来解决我需要为每个客户端单独增加票号的问题.
我有一个表foo_bar
,另一个表spam_eggs
有fb
外键指向foo_bar
.spam_eggs
删除相关的行时会级联spam_eggs.fb
删除.
我正在使用PostgreSQL.
在我曾经用于SELECT... FOR UPDATE
锁定spam_eggs
行的事务中.在此事务的持续时间内,另一个事务已尝试DELETE FROM...
与foo_bar
我的锁定行相关联.这会触发错误,还是我的锁定行会导致查询阻塞直到我的原始更新事务结束?
aiohttp内置了对websockets 的支持。它非常简单并且运行良好。
文档中示例的简化版本是:
async def handler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
# Async iterate the messages the client sends
async for message in ws:
ws.send_str('You sent: %s' % (message.data,))
print('websocket connection closed')
Run Code Online (Sandbox Code Playgroud)
在示例中,ws
是对与客户端的 websocket 连接的引用。我可以轻松地将此引用放入request.app
,就像@Crandel 在这里所做的那样(即全局状态),但不能放在生产应用程序中,因为每个应用程序服务器(甚至每个工作人员)都有自己的app
实例。
对此有公认的模式吗?还有其他方法吗?
注意:我不是指会话。我指的是连接。当服务器 B 中的应用程序代码中发生事件时,我想向连接到服务器 A 的客户端发送一条消息,等等。
我需要将格式化的整数转换为常规整数:
等等.
看起来int(000000000015)
数字13的结果很简单.我知道幕后有一些奇怪的东西.每次都准确地做到这一点的最佳方法是什么?
以下字段用于将货币格式化为两位十进制(量化).您可以看到它返回<decimal>.quantize(TWOPLACES)
存储的十进制版本.但是,当我在Django管理员中查看它时,它不会这样做.如果我投入50
到使用现场CurrencyField()
,并查看它在管理,我得到50
VS 50.00
.这是为什么?
from django.db import models
from decimal import Decimal
class CurrencyField(models.DecimalField):
"""
Only changes output into a quantized format. Everything else is the same.
"""
def __init__(self, *args, **kwargs):
kwargs['max_digits'] = 8
kwargs['decimal_places'] = 2
super(CurrencyField, self).__init__(*args, **kwargs)
def to_python(self, value):
try:
return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
except AttributeError:
return None
Run Code Online (Sandbox Code Playgroud)
更新:我尝试return 'Hello World'
代替,return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
它甚至没有在shell中显示'Hello World'.它又熄灭50
了.这是否意味着当我访问模型的属性时,CurrencyField()
它不会调用to_python()
?
抱歉这个令人困惑的标题.我试着减少冗长,但......
我想知道的是:Django的新行级别权限(a)是否修复了多租户应用程序带来的设计问题(我不是指多个用户,而是使用相同的db/db架构的多个实例),或者它是(b)只是一个更复杂的权限版本,允许您根据标准的用户和Auth应用程序规则管理行级别的权限.
(即,我想限制对此帐户的对象a,b,c的访问权限,以及d,e,f到此帐户VS用户可以访问博客文章的标题而不是内容)
我读了这个页面:http://www.djangoproject.com/documentation/models/custom_pk/,示例没有列出unique = True.我想知道是否有令人信服的理由让他们不予理睬,或者我是否有理由将其包括在内.我的假设是指定primary_key = True会自动执行此操作.有什么想法吗?
我一直在和Django一起打路,看过Pylons.Pylons似乎正是我所需要的(更绿的草),但后来我意识到它们在整个地方都有全局变量,并且被黑暗灵魂注入的黑魔法(灵魂如此黑暗以至于它们甚至杀死了独角兽).
有没有什么是企业值得的(即,没有强加性能或扩展限制),留下我的方式,但提供基本的请求/响应处理,会话,SQLAlchemy(也许),以及一种方式插入模板等?有什么希望吗?
我一直在努力在Django开发SAAS,这是一场噩梦.它们不支持多列主键,并且在开发更复杂的应用程序(特别是具有多租户权限)时,您不会遇到模型转义等许多其他问题.我不使用它们的身份验证系统并不需要我自己构建.我只需要安全性(CSRF,XSS,SQL注入等).
具体来说,我在谈论Python.我试图通过查看对象的值而不传入它来破解某些东西(只是一点点),并且我想知道使用本地线程来执行该操作是否是线程安全的.另外,你甚至怎么做这样的事情?
这不起作用:
def register_method(name=None):
def decorator(method):
# The next line assumes the decorated method is bound (which of course it isn't at this point)
cls = method.im_class
cls.my_attr = 'FOO BAR'
def wrapper(*args, **kwargs):
method(*args, **kwargs)
return wrapper
return decorator
Run Code Online (Sandbox Code Playgroud)
装饰者就像电影Inception; 你去的级别越多,它们就越混乱.我正在尝试访问定义方法的类(在定义时),以便我可以设置类的属性(或更改属性).
版本2也不起作用:
def register_method(name=None):
def decorator(method):
# The next line assumes the decorated method is bound (of course it isn't bound at this point).
cls = method.__class__ # I don't really understand this.
cls.my_attr = 'FOO BAR'
def wrapper(*args, **kwargs): …
Run Code Online (Sandbox Code Playgroud) django ×5
python ×5
postgresql ×2
sql ×2
aiohttp ×1
autofield ×1
channels ×1
decorator ×1
integer ×1
multi-tenant ×1
parsing ×1
pylons ×1
python-3.5 ×1
select ×1
sequence ×1
thread-local ×1
websocket ×1
wsgi ×1