Tag: django

在Django中分离业务逻辑和数据访问

我正在Django写一个项目,我看到80%的代码在models.py文件models.py 。 这段代码令人困惑,在一段时间之后,我停止了解真正发生的事情。 这是困扰我的东西: 我发现我的模型级别(它应该只负责数据库中的数据)的工作也在发送电子邮件,在其他服务上发送API等。 另外,我觉得在视图中放置业务逻辑是不可接受的,因为这样很难控制。 例如,在我的应用程序中,至less有三种方法来创buildUser新实例,但从技术上讲,它应该一致地创build它们。 当我的模型的方法和属性变得不确定时,以及当它们产生副作用时,我并不总是注意到。 这是一个简单的例子。 起初, User模型是这样的: class User(db.Models): def get_present_name(self): return self.name or 'Anonymous' def activate(self): self.status = 'activated' self.save() 随着时间的推移,它变成这样: class User(db.Models): def get_present_name(self): # property became non-deterministic in terms of database # data is taken from another service by api return remote_api.request_user_name(self.uid) or 'Anonymous' def activate(self): # method […]

如何检查Django的版本

我必须为我们的应用程序使用Python和Django 。 所以我有两个版本的Python,2.6和2.7。 现在我已经安装了Django。 我可以运行示例应用程序来testingDjango succesfuly。 但是,我如何确定Django是使用2.6还是2.7版本以及Django使用的是什么版本的模块呢?

如何在MySQL中暂时禁用外键约束?

是否有可能暂时禁用MySQL中的约束? 我有两个Django模型,每个都有一个ForeignKey到另一个。 由于ForeignKey约束,删除模型的实例会返回一个错误: cursor.execute("DELETE FROM myapp_item WHERE n = %s", n) transaction.commit_unless_managed() #a foreign key constraint fails here cursor.execute("DELETE FROM myapp_style WHERE n = %s", n) transaction.commit_unless_managed() 是否有可能暂时禁用约束和删除呢?

我怎么做不等于在Django queryset过滤?

在Django模型的QuerySets中,我发现有一个__gt和__lt用于比较值,但是有一个__ne / != / <> ( 不等于 ?) 我想过滤出一个不等于: 例: Model: bool a; int x; 我想要 results = Model.objects.exclude(a=true, x!=5) !=不正确的语法。 我试过__ne , <> 。 我结束了使用: results = Model.objects.exclude(a=true, x__lt=5).exclude(a=true, x__gt=5)

如何在Django中debugging,好方法?

所以,我开始学习使用Python和后来的Django进行编码。 第一次很难看回溯,实际上弄清楚我做错了什么,语法错误在哪里。 现在已经过去了一段时间,我想我在debugging我的Django代码的过程中得到了一个例程。 由于这是在我的编码经验的早期完成的,我坐下来,想知道我是如何做到这一点是无效的,可以做得更快。 我通常设法find和纠正我的代码中的错误,但我想知道我应该更快地做到这一点吗? 我通常只使用Django启用时的debugging信息。 当事情最终会按照我的想法结束时,我会用一个语法错误来分解代码stream,然后查看stream中当时的variables,找出代码执行的操作,而不是我想要的。 但是这可以改善吗? 有没有一些好的工具或更好的方法来debugging你的Django代码?

在django中区分null = True,blank = True

当我们在django中添加数据库字段时,我们通常会编写models.CharField(max_length=100, null=True, blank=True) 。 与ForeignKey , DecimalField等完成相同的是有什么基本的区别 null=True仅为null=True blank=True仅为blank=True null=True , blank=True 关于不同的( CharField , ForeignKey , ManyToManyField , DateTimeField )字段。 使用1/2/3有什么优点/缺点?

如何在生产数据库上运行djangounit testing?

我正在开始TDD的发展态度,正在为我的django应用程序编写unit testing。 我知道夹具,知道这就是testing应该执行的方式,但是对于给定的testing,我需要在整个数据库上执行它,而且对于超过1000万行数据库的json夹具不是我想要处理的此外,这个testing是“只读”的。 所以问题是你如何设置你的testing套件在生产数据库上运行? 我想这可能就像在某些testing的setUp方法中添加DATABASE_NAME设置一样简单。 但运行testing时,settings.DATABASE_NAME =“prod_db”导致“NameError:全局名称”设置未定义“。 此外,在http://code.djangoproject.com/ticket/11987中描述的风险是,您可能会意外删除生产数据库。 那么,如何才能在一个生产数据库上运行一个testing套件而不是临时的testing套件呢?或者更好的做法是什么? 欢迎提前意见!

Django 1.7 – makemigrations没有检测到变化

正如标题所说,我似乎无法获得迁移工作。 该应用程序最初是在1.6以下,所以我明白,迁移将不会在那里开始,事实上,如果我运行python manage.py migrate我得到: Operations to perform: Synchronize unmigrated apps: myapp Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables… Installing custom SQL… Installing indexes… Running migrations: No migrations to apply. 如果我对myapp任何模型进行了更改,它仍然会如预期的那样表示没有偏移。 但是,如果我运行python manage.py makemigrations myapp我得到: No changes detected in app 'myapp' 似乎并不关心我运行该命令的方式,也不会检测到应用程序发生更改,也不会将任何迁移文件添加到应用程序中。 有什么办法强制一个应用程序迁移,基本上说:“这是我的基地工作”或任何东西? 还是我错过了什么? 我的数据库是PostgreSQL的,如果有帮助的话。

Django如何知道命令来呈现表单域?

如果我有一个Django表单,例如: class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField() sender = forms.EmailField() 我调用这个表单的一个实例的as_table()方法,Django将按照上面指定的顺序渲染这些字段。 我的问题是,Django如何知道定义的类variables的顺序? (也如何重写这个顺序,例如,当我想从classe的init方法中添加一个字段?)

Pycharm:为运行manage.py任务设置环境variables

我已经将我的SECRET_KEY值移出了我的设置文件,并且在加载我的virtualenv时被设置。 我可以确认从python manage.py shell存在的值。 当我运行Django控制台时, SECRET_KEY丢失,因为它应该。 所以在首选项中,我进入了Console> Django Console并加载SECRET_KEY和相应的值。 我回到Django控制台, SECRET_KEY在那里。 正如所料,我还不能运行一个manage.py任务,因为它还没有findSECRET_KEY 。 所以我进入“运行”>“编辑configuration”,将SECRET_KEY添加到Django服务器和Djangotesting中,并添加到项目服务器中。 重新启动Pycharm,确认密钥。 当我运行一个manage.py任务时,比如runserver ,我仍然得到KeyError: 'SECRET_KEY'. 我在哪里把这个钥匙?