我正在尝试在运行OS X 10.6.3,Ruby 1.8.7和Rails 2.3.5的全新MacBook Pro上安装Rails 3,我想知道我是否已经自己洗了.到目前为止,我已经运行了这些命令:
$ gem update --system
$ gem install arel tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
$ gem install rails --pre
Run Code Online (Sandbox Code Playgroud)
但是,当我运行最后一个命令时,我收到此错误:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions into the /usr/bin directory.
Run Code Online (Sandbox Code Playgroud)
我认为它希望我运行命令,sudo
以便它可以写入/usr/bin/rails
.但如果我这样做,我不会覆盖我的Rails 2.3.5可执行文件吗?我不想那样做.相反,我想保留两个版本的Rails.我怎么做?
我很困惑,我应该把我的virtualenvs放在哪里.
在我的第一个django项目中,我使用命令创建了项目
django-admin.py startproject djangoproject
Run Code Online (Sandbox Code Playgroud)
然后我进入djangoproject目录并运行命令
virtualenv env
Run Code Online (Sandbox Code Playgroud)
它创建了与内部djangoproject
目录相同级别的虚拟环境目录.
这是为这个特定项目创建virtualenv的错误位置吗?
我得到的印象是,大多数人将所有的virtualenvs保存在一个完全不同的目录中,例如~/virtualenvs
,然后使用virtualenvwrapper在它们之间来回切换.
有没有正确的方法来做到这一点?
我仍然试图理解在模型级别使用自定义验证器验证Django模型对象的正确方法.我知道验证通常是在表单或模型中完成的.但是,如果我通过Python shell中的ORM与它进行交互,我想在模型级别确保数据的完整性.这是我目前的做法:
from django.db import models
from django.core import validators
from django.core exceptions import ValidationError
def validate_gender(value):
""" Custom validator """
if not value in ('m', 'f', 'M', 'F'):
raise ValidationError(u'%s is not a valid value for gender.' % value)
class Person(models.Model):
name = models.CharField(max_length=128)
age = models.IntegerField()
gender = models.CharField(maxlength=1, validators=[validate_gender])
def save(self, *args, **kwargs):
""" Override Person's save """
self.full_clean(exclude=None)
super(Person, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
我应该创建一个自定义验证函数,将其指定为验证器,然后覆盖Person的save()函数,就像我上面所做的那样?(顺便说一句,我知道我可以使用'choices'字段选项验证我的性别选择,但我为了说明的目的创建了'validate_gender').
如果我真的想确保数据的完整性,我是否应该在模型层编写Django单元测试以及使用Python/Psycopg进行等效的数据库级单元测试?我注意到,引发ValidationErrors的Django单元测试只测试模型使用数据库副本对数据库模式的理解.即使我使用South进行迁移,任何数据库级约束都限于Django可以理解并转换为Postgres约束.如果我需要一个Django无法复制的自定义约束,如果我直接通过psql终端与数据库进行交互,我可能会将数据输入到我的数据库中而违反该约束.
谢谢!
通常,当我在MacBook(OS X 10.8.5)上启动Django开发Web服务器时,我会看到一个弹出窗口,上面写着"你想让应用程序'python'接受传入的网络连接吗?" 我总是点击"允许",我可以在我的安全和隐私设置中看到"python"在那里,并设置为"允许传入连接",但我仍然得到这个弹出窗口.我需要采取其他措施来防止此弹出窗口再次出现吗?
谢谢.
据我所知,当一个人创建一个Django应用程序时,在将表单插入到模型实例中然后将其写入数据库之前,表单会对数据进行验证.但是如果我想在数据模型层创建一个额外的保护层,那么我在目前的"最佳实践"下面做了什么?我正在努力确保评论者的名字不能被省略,也不能留空.我应该在'clean'方法中进行任何自定义验证,就像我在这里做的那样然后'保存'调用'full_clean'调用'clean'?如果不是,那么首选方法是什么?谢谢.
class Reviewer(models.Model):
name = models.CharField(max_length=128, default=None)
def clean(self, *args, **kwargs):
if self.name == '':
raise ValidationError('Reviewer name cannot be blank')
super(Reviewer, self).clean(*args, **kwargs)
def full_clean(self, *args, **kwargs):
return self.clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(Reviewer, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud) 我想在视图中设置一个cookie,然后让该视图呈现一个模板.据我了解,这是设置cookie的方法:
def index(request):
response = HttpResponse('blah')
response.set_cookie('id', 1)
return response
Run Code Online (Sandbox Code Playgroud)
但是,我想设置一个cookie,然后渲染一个模板,如下所示:
def index(request, template):
response_obj = HttpResponse('blah')
response_obj.set_cookie('id', 1)
return render_to_response(template, response_obj) # <= Doesn't work
Run Code Online (Sandbox Code Playgroud)
模板将包含链接,单击这些链接将执行其他视图,以检查我正在设置的cookie.我在上面第二个例子中展示的是什么?我知道我可以创建一个包含我的模板的所有HTML的字符串,并将该字符串作为参数传递给HttpResponse,但这看起来真的很难看.有没有更好的方法来做到这一点?谢谢.
有没有办法从Unix命令行下载git repo的内容,而不会删除.git目录中的所有内容?我只想要最新版本的repo目录和文件,而不是所有的差异.
另外,是否可以在不使用git命令的情况下完成此操作(例如,可能使用wget或curl)?
谢谢.
如何防止nosetests在其测试的输出中散布日志输出?我只是将记录添加到我的Django代码中,如下所示:
import logging
logger = logging.getLogger(__name__)
def home_page(request, template):
device = get_device_capabilities(request)
device_type = get_device_type(device)
logger.info("device_type = " + device_type)
logger.info("screen_width = " + str(screen_width))
Run Code Online (Sandbox Code Playgroud)
当我运行这样的测试时:
nosetests --nocapture
Run Code Online (Sandbox Code Playgroud)
我明白了:
[04/15/2014 02:42:57 PM] INFO [apps.home.views:24] device_type = computer
[04/15/2014 02:42:57 PM] INFO [apps.home.views:25] screen_width = 800
....................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 230 tests in 42.521s
OK
Run Code Online (Sandbox Code Playgroud)
我刚刚开始提高异常和记录信息,我当然不希望我的测试输出充斥着我的记录器语句的输出.我认为"--nocapture"标志应该阻止这一点.我已经浏览了所有的测试文档,并没有看到任何有用的东西.我错过了什么吗?有没有办法阻止nosetests在我的输出中包含我的记录器消息?
谢谢!
我想在Heroku上运行Rails应用程序,所以我使用Homebrew在我的Snow Leopard机器上安装了PostgreSQL.目前,brew将9.1.2安装到/ usr/local/Cellar/postgresql中.经过一些研究,我发现Heroku的免费共享版本需要8.3.x. 虽然homebrew-alt没有8.3,但确实有8.4,所以我将其下载并安装到/ usr/local/Cellar/postgresql8中.然后我确认我能够在每个版本上创建和运行数据库.以为我可以使用"brew [link | unlink]来回切换,我运行"brew unlink postgresql8"然后"brew link postgresql".但是,运行后一个命令会导致此错误:
链接/usr/local/Cellar/postgresql/9.1.2 ...错误:无法链接postgresql另一个版本已经链接:/usr/local/Cellar/postgresql/9.1.2
有没有办法做到这一点(来回切换)或者我误解了应该如何使用brew链接/取消链接?
顺便说一下,"brew list"显示"postgresql"和"postgresql8",所以我不认为我应该说"brew link postgresql9".
谢谢.
我是Django的新手,并通过Holovaty和Kaplan-Moss的"The Django Book"工作.我有一个名为"mysite"的项目,其中包含两个名为"books"和"contact"的应用程序.每个都有自己的view.py文件.在我的urls.py文件中,我有以下内容:
from books import views
from contact import views
...
urlpatterns = patterns('',
...
(r'^search/$', views.search),
(r'^contact/$', views.contact),
...
Run Code Online (Sandbox Code Playgroud)
当我运行我的代码时,我收到此错误:
NameError在/ search/...异常值:'module'对象没有属性'search'
我认为正在发生的事情是,由于联系人的观点是最后导入的,因此Django正在查看不包含搜索的联系人视图(搜索在书籍视图中).
从Django urls文件中的两个不同应用程序导入views.py文件的正确方法是什么?
谢谢你的帮助!
django ×6
python ×5
macos ×2
cookies ×1
django-views ×1
git ×1
github ×1
homebrew ×1
nosetests ×1
postgresql ×1
virtualenv ×1