小编use*_*478的帖子

帮助CRUD程序员考虑"批准工作流程"

我一直在研究一个基本上是CRUD应用程序(创建,读取,更新,删除)的Web应用程序.最近,我开始研究我称之为"批准工作流程".基本上,会为物料生成请求,然后将其发送给经理批准.根据请求的不同,不同的人需要批准请求或者将其发送回请求者进行修改.批准者需要跟踪批准已批准的内容以及请求者需要查看其请求状态的内容.

作为一名"CRUD"开发人员,我正在努力解决如何设计这个问题.我应该拥有哪些数据库表?如何跟踪请求的状态?我应该如何通知用户他们的请求发生的操作?

他们的设计模式可以帮助我吗?我应该在我的代码中绘制状态机吗?

我认为这是一个通用的编程问题,但如果它有所不同,我正在使用Django和MySQL.

database-design database-schema

16
推荐指数
2
解决办法
5271
查看次数

MySQL更改外键类型

我正在使用MySQL,我有一个索引表,在许多其他表中用作外键.我想更改索引的数据类型(从有符号整数到无符号整数),这样做的最佳方法是什么?

我尝试更改索引字段上的数据类型,但这会失败,因为它被用作其他表的外键.我尝试在其中一个外键上更改数据类型,但由于它与索引的数据类型不匹配而失败.

我想我可以手动删除所有外键约束,更改数据类型并添加约束,但这将是很多工作,因为我有很多表使用此索引作为外键.有没有办法在进行更改时暂时关闭外键约束?另外,有没有办法获取引用索引作为外键的所有字段的列表?

更新: 我在关闭外键检查后尝试修改一个外键,但它似乎没有关闭检查:

SET foreign_key_checks = 0;

ALTER TABLE `escolaterrafir`.`t23_aluno` MODIFY COLUMN `a21_saida_id` INTEGER DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)

这是错误:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
090506 11:57:34 Error in foreign key constraint of table escolaterrafir/t23_aluno:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match to the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT …
Run Code Online (Sandbox Code Playgroud)

mysql sql foreign-keys

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

PHP函数imagettftext()和unicode

我正在使用PHP函数imagettftext()将文本转换为GIF图像.我转换的文本包含Unicode字符,包括日语.在我的本地机器(Ubuntu 7.10)上一切正常,但在我的webhost服务器上,日文字符被破坏了.可能导致差异的原因是什么?一切都应编码为UTF-8.

webhost服务器上的破碎图像:http: //www.ibeni.net/flashcards/imagetest.php

从我的本地机器复制正确的图像:http: //www.ibeni.net/flashcards/imagetest.php.gif

我本地机器上的phpinfo()副本:http: //www.ibeni.net/flashcards/phpinfo.php.html

我的webhost服务器上的phpinfo()副本:http: //example5.nfshost.com/phpinfo

码:

mb_language('uni');
mb_internal_encoding('UTF-8');

header('Content-type: image/gif');

$text = '???';
$font = './Cyberbit.ttf';

// Create the image
$im = imagecreatetruecolor(160, 160);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

// Create some colors
imagefilledrectangle($im, 0, 0, 159, 159, $white);

// Add the text
imagettftext($im, 12, 0, 20, 20, $black, $font, $text);
imagegif($im);
imagedestroy($im); 
Run Code Online (Sandbox Code Playgroud)

php unicode gd

11
推荐指数
2
解决办法
2万
查看次数

python中的类的Lambda函数?

必须有一个简单的方法来做到这一点,但不知何故,我可以绕过它.我可以描述我想要的最好的方法是一个类的lambda函数.我有一个库,希望作为一个参数,使用一个未经实例化的类.然后它实例化类本身以继续工作.问题是我希望能够动态创建类的版本,传递给库,但我无法弄清楚如何做到这一点,因为库需要一个未实例化的版本.下面的代码描述了问题:

class Double:
    def run(self,x):
        return x*2

class Triple:
    def run(self,x):
        return x*3

class Multiply:
    def __init__(self,mult):
        self.mult = mult
    def run(self,x):
        return x*self.mult

class Library:
    def __init__(self,c):
        self.c = c()
    def Op(self,val):
        return self.c.run(val)

op1 = Double
op2 = Triple
#op3 = Multiply(5)

lib1 = Library(op1)
lib2 = Library(op2)
#lib3 = Library(op3)

print lib1.Op(2)
print lib2.Op(2)
#print lib3.Op(2)
Run Code Online (Sandbox Code Playgroud)

我不能使用通用的Multiply类,因为我必须首先实例化它,这会破坏库"AttributeError:Multiply instance has no call method".在不更改Library类的情况下,有没有办法可以做到这一点?

python lambda

9
推荐指数
2
解决办法
2万
查看次数

Django模型的动态元属性?

我试图使用模型继承为我的所有Django模型添加动态Meta属性,但我无法让它工作.我有一个权限,我想添加到我的所有模型,如下所示:

class ModelA(models.Model):
    class Meta:
        permisssions =(('view_modela','Can view Model A'),)   

class ModelB(models.Model):
    class Meta:
        permisssions =(('view_modelb','Can view Model B'),)
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个这样的抽象基类:

class CustomModel(models.Model):
    def __init__(self, *args, **kwargs):
        self._meta.permissions.append(('view_'+self._meta.module_name, u'Can view %s' % self._meta.verbose_name))
        super(CustomModel,self).__init__(*args, **kwargs)

class ModelA(CustomModel):
    ....

class ModelB(CustomModel):
    ...
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这是正确的方法吗?因为Django使用内省来构造Model类,所以我不确定__init__()在类中添加权限是否会起作用.使用我当前的实现,每次访问模型实例时,它都会附加另一个权限元组.

django django-models

9
推荐指数
1
解决办法
5701
查看次数

如何安全地更新实时网站

我们有一个相当简单的基于Django的网站来进行CRUD操作.我一直在本地进行测试和开发,然后在测试完成后检查发布和数据库模式更改到实时服务器上.我们最近在发布某些类型的更改时遇到了问题.想象一下以下一系列事件:

  1. 用户打开Web表单
  2. 网站已更新为需要此表单上的新字段
  3. 用户提交他们一直在处理的表单
  4. 服务器返回错误,因为它希望接收在步骤2中添加的新字段

其他网站如何处理这些问题?我的想法:

  • 在进行更新时使网站脱机.这并没有真正解决问题,因为用户可以在提交之前将网络表单打开无限长时间,但在一定时间之后,任何人都不可能提交表单.
  • 在非常低的流量时间进行自动更新.再次,这并没有真正解决问题,但我们的网站不是那么受欢迎,如果我们在3:00a做了更新,我怀疑会有很多用户.这种技术的一个问题是失败的自动更新.
  • 版本控制表单,以便服务器识别出正在提交旧表单并提供更加用户友好的响应.有自动化工具可以帮助解决这个问题吗?

思考?

versioning deployment django schema

7
推荐指数
1
解决办法
909
查看次数

调试在Google App Engine上部署时出错的Google Web Toolkit应用程序

我有一个Google Web Toolkit应用程序,我正在部署到Google App Engine.在已部署的应用程序中,我收到JavaScript错误Uncaught TypeError: Cannot read property 'f' of null.这听起来像Java等效的Java NullPointerException.

问题是GWT JavaScript被混淆了,因此无法在浏览器中调试,我无法在托管模式下重现相同的问题,我可以使用Java调试器.我认为我只看到已部署应用程序上的错误的原因是我在GAE服务器上使用的数据库触发的内容与我在测试和开发期间使用的测试数据库不同.

那么,关于最佳进展方式的任何想法?我想到了以下几点:

  • 部署我的应用程序的非封闭版本.尽管有很多谷歌搜索,我无法弄清楚如何使用谷歌Eclipse插件提供的自动部署脚本来做到这一点.有人知道吗?
  • 下载我的GAE数据并将其复制到本地服务器
  • 以某种方式指出我的开发代码使用GAE服务器来代替本地测试数据库.这似乎是最好的主意......

谁能建议如何在这里继续?

最后,有没有办法在生产服务器上捕获这些JavaScript错误并将它们记录到某个地方?如果没有日志记录,我无论如何都不会知道我的用户是否遇到了服务器上没有出现的错误.GWT.log()函数会自动从生产代码中删除...

debugging gwt google-app-engine google-eclipse-plugin

7
推荐指数
1
解决办法
3252
查看次数

如何在ReportLab中创建项目符号列表

如何在ReportLab中创建项目符号列表?文档令人沮丧地含糊不清.我在尝试:

text = ur '''
<para bulletText="&bull;">
item 1
</para>
<para bulletText="&bull;">
item 2
</para>
'''
Story.append(Paragraph(text,TEXT_STYLE))
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误list index out of range.看来我不能<para></para>在一次通话中加一个以上Paragraph()?我也试过设置,TEXT_STYLE.bulletText="&bull;"但这也不起作用......

python pdf reportlab

6
推荐指数
2
解决办法
7038
查看次数

在GWT中需要解除绑定演示者的绑定

我按照此处给出的示例使用我的GWT应用程序中的MVP模式http://code.google.com/webtoolkit/doc/latest/tutorial/mvp-architecture.html

我为MainView中的每个面板都有一个MainPresenter和sub-presenter.为了展示一个新的子演示者,我做了这样的事情:

presenter = new PresenterA(new ViewA(), ....);
presenter.go(panel) // presenter clears the panel and itself to the panel
Run Code Online (Sandbox Code Playgroud)

何时PresenterA创建,它将自己绑定到事件中ViewA.我的问题是,切换到新演示者的正确方法是什么?现在,我只是创建一个新的演示者并将其附加到同一个面板,如下所示:

presenter = new PresenterB(new ViewB(), ....);
presenter.go(panel) // presenter clears the panel and itself to the panel
Run Code Online (Sandbox Code Playgroud)

我对这种方法有些怀疑.首先,当我切换到新的演示者时,我是否导致内存泄漏?我丢失了引用旧演示者的字段并将其从附加到的面板中清除.我想这意味着它应该是垃圾收集,但我不是很确定.其次,老主持人的事件绑定会发生什么?这些绑定是否会阻止演示者被垃圾收集?我需要先解开它们吗?

在没有内存泄漏和绑定到"死"事件的情况下处理切换演示者的情况的正确方法是什么.

javascript java mvp gwt memory-leaks

6
推荐指数
1
解决办法
2175
查看次数

Django 中的游标是否在打开的事务中运行?

我的 Django 应用程序正在使用一些自定义 SQL,我在这样的视图中执行:

db = router.db_for_write(model)
cursor = connections[db].cursor()
cursor.execute("INSERT INTO ....")
Run Code Online (Sandbox Code Playgroud)

由于我使用的是TransactionMiddleware,因此我的视图在事务中运行,但我不清楚获取像这样的新游标是否“转义”了当前打开的事务,或者游标是否仍然是打开事务的一部分。我收到一些错误消息,使我相信游标正在事务中运行。

我希望能够使用游标在由TransactionMiddleware. 这可能吗?

如果重要的话,我正在运行带有 PostgreSQL 8.4 数据库的 Django 1.4。

python sql django postgresql python-db-api

6
推荐指数
1
解决办法
4496
查看次数