我正在使用django-simple-history
:
http://django-simple-history.readthedocs.io/en/latest/
我有一个模型,我想将其方法应用于历史实例。例子:
from simple_history.models import HistoricalRecords
class Person(models.Model):
firstname = models.CharField(max_length=20)
lastname = models.CharField(max_length=20)
history = HistoricalRecords()
def fullName(self):
return firstname + lastname
person = Person.objects.get(pk=1) # Person instance
for historyPerson in person.history:
historyPerson.fullName() # wont work.
Run Code Online (Sandbox Code Playgroud)
由于HistoricalPerson类没有继承Person的方法。但使用 Person 方法实际上是有意义的,因为它们共享相同的字段。
有什么解决办法吗?我更喜欢简单的东西,而不是像为历史实例复制模型中的每个方法一样。
我有一个交互式SVG - 以全窗口大小显示.我想为它添加一些按钮.是否可以<button>
在<svg>
标签内添加普通元素?
我想不是,但我问的是SVG是否有类似的东西.
从一些图纸我得到这样的坏结果:https:
//jsfiddle.net/pvxr6g8k/1/
<svg version="1.1" id="svg9723" height="768" width="1268">
<g style="fill:#e6e6e6" id="g3332-7" transform="matrix(0.27404175,0,0,-0.447665,86.580009,508.16151)">
<g style="fill:#e6e6e6" clip-path="url(#clipPath3336-0-0)" id="g3334-7">
<g style="fill:#e6e6e6" transform="translate(992.5469,164.3086)" id="g3340-6">
<path inkscape:connector-curvature="0" id="path3342-2" style="fill:#e6e6e6;stroke:#241a5d;stroke-width:4.48957968;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" d="m 0,0 c -6.937,0 -12.58,5.645 -12.58,12.58 l 0,63.277 c 0,6.937 5.643,12.581 12.58,12.581 l 279.488,0 c 6.936,0 12.58,-5.644 12.58,-12.581 l 0,-63.277 C 292.068,5.645 286.424,0 279.488,0 L 0,0 Z"></path>
</g>
</g>
</g>
<text transform="scale(0.9324557,1.072437)" id="text3390-1" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.87269115px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, Bold';writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" x="413.18262" y="390.15326">
<tspan style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:'Arial Bold'" y="390.15326" x="413.18262" id="tspan3392-0" …
Run Code Online (Sandbox Code Playgroud) 异步函数内的这段代码没有给出预期的结果:
var result = await $.when( $.get('/api/1'), $.get('/api/2') );
Run Code Online (Sandbox Code Playgroud)
对于一个请求,结果将是我期望的输出(响应文本)。但是,对于这两个请求,返回的result
是一个不包含两个 Promises 值的数组。有什么解决方法吗?
我知道有then()
和done()
,但我更喜欢使用await。
我发现了一些关于此的帖子.但我仍然感到困惑.
我想使用django rest framework api来被vue使用.我的问题:
我应该使用django模板吗?我猜不是,导致django模板语法与vue发生冲突.但我仍需要提供模板 - 我应该只使用带有apache的静态模板吗?
假设我使用静态模板,我如何使用django模板预渲染页面?
我的意思是,使用django我有一个像/ resource?id = 5的网址,
但是使用rest api,从网址获取id = 5资源并进行渲染将是vue的责任,但我不喜欢需要额外的xhr.
似乎所有的文档都假设我使用node.js,我没有.除了django apache服务器之外,我还必须使用另一个node.js服务器吗?
使用webpack/npm的vue.js 强制使用特定的app文件夹结构吗?如何使用正常的django项目结构?
我有一个 asyncio 应用程序,它使用服务器 fromaiohttp
和异步套接字asyncio.open_connection()
我的代码包含来自 PIL 库的一些阻塞调用,例如
Image.save()
Image.resize()
Run Code Online (Sandbox Code Playgroud)
os.path.join()
被认为可以?在numpy
数组上工作怎么样?该模型:
class Item(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
item_num = models.IntegerField()
# other fields...
class Meta:
unique_together = [('company', 'item_num') ]
Run Code Online (Sandbox Code Playgroud)
序列化器:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('company_id', 'item_num', )
Run Code Online (Sandbox Code Playgroud)
问题是 django Rest 框架ReadOnlyField()
为该company_id
字段生成一个 ,因此当我在视图代码中创建一个新实例时,该字段不可编辑,如下所示:
s = ItemSerializer(data=request.POST)
s.save()
Run Code Online (Sandbox Code Playgroud)
UniqueTogetherValidator
我还丢失了模型中定义的默认值。不过,如果我将序列化器字段名称从“company_id”更改为“company”,我确实会得到验证器,因为 drf 将生成,PrimaryKeyRelatedField
因此它将是可编辑的。
我如何仍然将外键对象命名为“company_id”,因为我更喜欢这样命名它们,并且仍然获得默认的验证和保存行为?最好不要向序列化器添加太多代码。
我希望我的代码使用 pythonlogging
来记录异常。在我通常使用的代码中await
,通常会引发异常,因此:
try:
await code_that_can_raise()
except Exception as e:
logger.exception("Exception happended")
工作正常。
然而,当使用
loop.create_task(coro())
我不确定如何在此处捕获异常。
包装 create_task() 调用显然不起作用。在代码中记录每个异常的最佳解决方案是什么?
grpc 客户端何时创建和关闭连接?
我以以下方式开始代码:
channel = grpc.insecure_channel('localhost:8888')
stub = myservice_pb2_grpc.MyServiceStub(channel)
Run Code Online (Sandbox Code Playgroud)
声明 a 是否会channel
在进程的整个生命周期内创建一个套接字?
因为即使我提供了无效的地址,insecure_channel()
在发出第一个请求之前我也看不到任何错误。
或者,套接字仅在发出请求时创建并随后关闭?
我使用这个 datetimepicker:
http : //eonasdan.github.io/bootstrap-datetimepicker/Options/
基本上我想设置maxDate: moment()
,即 maxDate 应该限制到现在。问题是当 datepicker 打开时 maxDate 不再是 now() 了。每次显示日期选择器时,我都想将它的 maxDate 设置为 now 。
如果可能,我想在全球范围内强制执行它,而不是在每个datetimepicker()
实例上都指定它。是否可以使用 moment.js 以某种方式给出一个相对日期?
看到这个小提琴:
https :
//jsfiddle.net/0Ltv25o8/3281/ 我将 maxDate 设置为现在。您将在页面加载一分钟后看到,您将无法使用箭头按钮选择当前分钟。
javascript maxdate twitter-bootstrap momentjs eonasdan-datetimepicker
我使用默认设置设置了 DRF。我的 ajax 客户端使用会话身份验证工作正常。我希望另一个远程服务器使用与 javascript 客户端相同的 API。
我的登录代码很简单:
class Login(APIView):
def post(self, request, *args, **kwargs):
user = authenticate(username=username, password=password)
if user is None:
return Response(status=status.HTTP_401_UNAUTHORIZED)
login(request, user)
# ...
Run Code Online (Sandbox Code Playgroud)
问题是当我使用来自另一台主机的客户端时,例如 python requests
,我收到 CSRF 错误。根据 DRF 文档,我认为我应该改用令牌身份验证。
问题:
为什么我需要令牌认证?sessionid cookie 已经是一个令牌,为什么我不能同时用于 ajax 客户端和软件客户端?因此避免为令牌使用另一个单独的数据库表。
由于我只想使用会话身份验证,如何仅对 ajax 客户端强制执行 CSRF?