我正试图psql在我的Vagrant机器上运行,但是我收到了这个错误:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting connections on
Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)
注意:Vagrant 1.9.2 Box:ubuntu/trusty64,https://atlas.hashicorp.com/ubuntu/boxes/trusty64
编辑 命令我用来安装和运行postgres:
sudo apt-get updatesudo apt-get install postgresqlsudo su postgrespsql -d postgres -U postgres我必须测试一个从request.args获取某些信息的视图.
我无法模仿这个,因为视图中的很多东西都使用了请求对象.我能想到的唯一选择是手动设置request.args.
我可以用test_request_context()做到这一点,例如:
with self.app.test_request_context() as req:
req.request.args = {'code': 'mocked access token'}
MyView()
Run Code Online (Sandbox Code Playgroud)
现在,此视图中的请求将包含我已设置的参数.但是我需要调用我的视图,而不仅仅是初始化它,所以我使用它:
with self.app.test_client() as c:
resp = c.get('/myview')
Run Code Online (Sandbox Code Playgroud)
但我不知道如何以这种方式操纵请求参数.
我试过这个:
with self.app.test_client() as c:
with self.app.test_request_context() as req:
req.request.args = {'code': 'mocked access token'}
resp = c.get('/myview')
Run Code Online (Sandbox Code Playgroud)
但是这没有设置request.args.
我正在使用 Python 2.7 和 Django 1.7。
我的管理界面中有一个方法可以生成某种 csv 文件。
def generate_csv(args):
...
#some code that generates a dictionary to be written as csv
....
# this creates a directory and returns its filepath
dirname = create_csv_dir('stock')
csvpath = os.path.join(dirname, 'mycsv_file.csv')
fieldnames = [#some field names]
# this function creates the csv file in the directory shown by the csvpath
newcsv(data, csvheader, csvpath, fieldnames)
# this automatically starts a download from that directory
return HttpResponseRedirect('/media/csv/stock/%s' % csvfile)
Run Code Online (Sandbox Code Playgroud)
总而言之,我创建了一个 csv 文件,将其保存在磁盘上的某个位置,然后将其 URL …
我正在制作一个计划应用程序,我需要一种方法来分类每个块的天数范围.日期标记为整数:
MON, TUE, WEN, THU, FRI, SAT, SUN 是 0, 1, 2, 3, 4, 5, 6
所以假设我已经安排了一个从星期二开始到星期五结束的区块.确定其范围很简单:
range(block.start_day, block.end_day +1)会给我的(1, 4).
但如果一个街区周六开始并于周三结束,那将无效.
我需要的结果是(5, 6, 0, 1, 2).
我有点卡在这一部分.我想我可以使用模运算符,但我不确定.
**编辑**我道歉,我已经更新了正确的所需输出.
使用Python 2.7.6
使用Django 1.7和Python 2.7.
我想测试邮件是否已发送以及邮件内容是否正确.
我尝试过使用django.core.mail中的outbox,但无济于事.我也可以获得stdout(因为我在运行测试时可以在控制台中看到邮件)?
models.py
class User(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email'
email = models.EmailField(max_length=255, unique=True)
is_staff = models.BooleanField(default=False)
org = models.ForeignKey('Org', null=True, blank=True,
on_delete=models.SET_NULL)
def __unicode__(self):
return self.email
@staticmethod
def send_password_token(email):
user = get_object_or_404(User, email=email)
token = Token.objects.get(user=user)
message_body = 'Your password reset token:\n\n\t%s' % token.key
send_mail('Password reset:', message_body,
settings.FROM_EMAIL, [email], fail_silently=False)
Run Code Online (Sandbox Code Playgroud)
tests.py
class UserModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(email='user@info.com',
password='0000')
@override_settings(EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend')
def test_send_password_token(self):
"""
Sends a password reset mail with users authentication token.
"""
token = …Run Code Online (Sandbox Code Playgroud) 我的基于烧瓶类的视图中有一个 abort()。我可以断言已调用 abort,但我无法访问上下文管理器中的 406 代码。
视图.py
from flask.views import View
from flask import abort
class MyView(View):
def validate_request(self):
if self.accept_header not in self.allowed_types:
abort(406)
Run Code Online (Sandbox Code Playgroud)
测试.py
from werkzeug.exceptions import HTTPException
def test_validate_request(self):
# Ensure that an invalid accept header type will return a 406
self.view.accept_header = 'foo/bar'
with self.assertRaises(HTTPException) as http_error:
self.view.validate_request()
self.assertEqual(http_error.???, 406)
Run Code Online (Sandbox Code Playgroud) 我试图将参数传递给我的视图,但我不断收到此错误:
NoReverseMatch at /pay/how
Reverse for 'pay_summary' with arguments '(False,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['pay/summary/$']
Run Code Online (Sandbox Code Playgroud)
/pay/how是我现在的观点.(这是该视图返回的当前模板).
urls.py
url(r'^pay/summary/$', views.pay_summary, name='pay_summary')
Run Code Online (Sandbox Code Playgroud)
views.py
def pay_summary(req, option):
if option:
#do something
else:
#do something else
....
Run Code Online (Sandbox Code Playgroud)
模板
<a href="{% url 'pay_summary' False %}">my link</a>
Run Code Online (Sandbox Code Playgroud)
编辑
我希望视图应该接受POST请求,而不是GET.
我有两个块使用相同的变量调用相同的方法.我想只调用一次该方法,但结果就是块外标记的范围.我尝试在父模板中header.html使用with标记调用此方法,但似乎没有任何效果.
这是布局:
{% extends "header.html" %}
{% load navigation_tags %}
{% block header %}
{% get_section site=site as section %}
{% include "foobar.html" with section=section %}
{% endblock header %}
{% block navigation %}
<nav>
<div class="container">
{% get_section site=site as section %}
{% navigation section.slug %}
</div>
</nav>
{% endblock navigation %}
Run Code Online (Sandbox Code Playgroud)
navigation_tags.py
@register.assignment_tag
def get_parent_section(site):
if site.id == settings.FOOBAR_SITE_ID:
section = Section.objects.get(id=settings.FOOBAR_SECTION_ID)
else:
# This is also a section instance.
return site.default_section
Run Code Online (Sandbox Code Playgroud) 我希望在反序列化期间将空字符串默认为0或null.
JSON
{
'injuries': '6',
'children': '2',
'civilians': '',
}
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到此错误:
"需要一个有效的整数."
models.py
from django.db import models
class Strike(models.Model):
location = models.ForeignKey('Location', on_delete=models.CASCADE)
civilians = models.PositiveIntegerField(blank=True, null=True)
injuries = models.PositiveIntegerField(blank=True, null=True)
children = models.PositiveIntegerField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
serializers.py
from rest_framework import serializers
from .models import Strike
class StrikeSerializer(serializers.ModelSerializer):
civilians = serializers.IntegerField(default=0, required=False)
class Meta:
model = Strike
fields = '__all__'
def create(self, validated_data):
return Strike.objects.create(**validated_data)
Run Code Online (Sandbox Code Playgroud)
主要
serializer = StrikeSerializer(data=strike)
Run Code Online (Sandbox Code Playgroud)
我尝试在create方法中操作数据,但在此之前会引发错误.在DRF结构中我可以覆盖它,特别是将''转换为0或无?
在 Django 中使用 factory_boy 时,我该如何实现?
模型.py
class TestModel(models.Model):
name = CharField()
order = IntegerField()
Run Code Online (Sandbox Code Playgroud)
食谱.py
class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel
name = factory.LazyAttribute(lambda o: faker.word().title())
order = 0
Run Code Online (Sandbox Code Playgroud)
测试.py
recipes.TestModelFactory.create_batch(4, order=+10)
Run Code Online (Sandbox Code Playgroud)
或者
recipes.TestModelFactory.create_batch(4, order=seq(10))
Run Code Online (Sandbox Code Playgroud)
或类似的东西,以达到这个结果:
TestModel.objects.all().values_list('order', flat=True)
[10, 20, 30, 40]
Run Code Online (Sandbox Code Playgroud)
更新
Ty @trinchet 的想法。所以我想一种解决方案是:
class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel
name = factory.LazyAttribute(lambda o: faker.word().title())
order = factory.Sequence(lambda n: n * 10)
Run Code Online (Sandbox Code Playgroud)
但这总是会在我的所有对象上设置序列,而我无法设置我想要的值。
一种解决方法是:
class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel
name = factory.LazyAttribute(lambda o: faker.word().title()) …Run Code Online (Sandbox Code Playgroud) python ×9
django ×6
flask ×2
testing ×2
csv ×1
email ×1
factory-boy ×1
postgresql ×1
pytest ×1
templates ×1
unit-testing ×1
vagrant ×1