小编Lau*_*Mat的帖子

使用 django rest 框架和 django oauth 工具包进行单元测试中的 oAuth 身份验证

如何为需要 oAuth 身份验证的 API 端点编写单元测试?

简单地将 oAuth 令牌添加到请求标头是行不通的(可能是因为测试数据库不是持久的)。将装置加载到数据库中也无济于事。

我将 django-rest-framework 与 django-oauth-toolkit 一起使用。

我的 test.py 代码:

class Com_jm_Test(TestCase):
    fixtures=['oauth.json',]
    print 'test com jm'
    multi_db=True

    def test_list_job(self):
        self.client=Client(HTTP_AUTHORIZATION='Bearer 0cx2G9gKm4XZdK8BFxoWy7AE025tvq')
        response=self.client.get('/com-jm/jobs/')
        self.assertEqual(response.status_code,200)
Run Code Online (Sandbox Code Playgroud)

结果:

AssertionError: 401 != 200
Run Code Online (Sandbox Code Playgroud)

django unit-testing oauth django-rest-framework

5
推荐指数
3
解决办法
2657
查看次数

基于同一模型中的另一个外键,动态限制Django模型中Foreignkey的选择

我有这些模型:

class UserProfile(models.Model):
    name = models.CharField(max_length=100)

class Dialog(models.Model):
    belong_to = models.ManyToManyField(UserProfile)

class Message(models.Model):
    # Dialog to which this message belongs
    part_of = models.ForeignKey(Dialog)

    # User who sends message
    sender = models.ForeignKey(UserProfile, related_name='sender')
    # User who receives message 
    receiver = models.ForeignKey(UserProfile, related_name='receiver')
Run Code Online (Sandbox Code Playgroud)

我想要做的是限制发送方和接收方字段的选择,以便它们只能是整个对话框所属的用户.我试过这个:

sender = models.ForeignKey(UserProfile,
                           related_name='sender',
                           limit_choices_to={'dialog':1})
Run Code Online (Sandbox Code Playgroud)

这限制了选择,但仅限于id = 1的对话框成员.我想知道这是否可以动态完成?

python django foreign-keys django-models

4
推荐指数
1
解决办法
2478
查看次数

django.db.utils.OperationalError:严重:角色“ django”不存在

在Digital Ocean上遵循了本教程,在可与Django 1.10结合使用的Ubuntu 16.04服务器上安装PostgreSQL 9.5。

一切都进行得很顺利,但是我无法让我的Django应用程序连接到数据库(或者看起来)。应用程序和数据库位于同一服务器上。

以下是一些设置,配置和报告:

我得到的错误:

File "/home/mathieu/web/agencies/lib/python3.5/site-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
django.db.utils.OperationalError: FATAL:  role "django" does not exist
Run Code Online (Sandbox Code Playgroud)

我的Django项目的数据库设置:

DATABASES = {
'sqlite3': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3')
},
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'agencies',
    'USER': 'django',
    'PASSWORD': '<password>',
    'HOST': 'localhost',
    'PORT': '5432',
}}
Run Code Online (Sandbox Code Playgroud)

hba_file

postgres=# SHOW hba_file;
hba_file
--------------------------------------
/etc/postgresql/9.5/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

其内容(无论如何,相关部分):

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections …
Run Code Online (Sandbox Code Playgroud)

django postgresql python-3.x digital-ocean ubuntu-16.04

4
推荐指数
2
解决办法
9339
查看次数

在开发,登台和生产之间分离自定义设置变量

我正在遵循Zachary Voase所规定的项目结构,但我正在努力解决一个具体问题.

我非常希望有一个自定义设置布尔变量(让我们称之为SEND_LIVE_MAIL),我将在项目中使用它.基本上,我想在我的代码中使用此设置变量,如果SEND_LIVE_MAIL为True,则实际发送邮件,而当它设置为False时,只需将其内容打印到控制台.后者将适用于开发环境以及运行单元测试时.

实现这个的好方法是什么?目前,根据环境,django服务器使用dev,staging或prd设置,但对于自定义设置变量,我认为这些变量需要"按字面意思"导入.换句话说,我会在我的观点中使用类似的东西

from settings.development import SEND_LIVE_MAIL
Run Code Online (Sandbox Code Playgroud)

这当然不是我想要的.我希望能够做到这样的事情:

from settings import SEND_LIVE_MAIL
Run Code Online (Sandbox Code Playgroud)

并根据环境,将正确的值分配给SEND_LIVE_MAIL变量.

提前致谢!

django

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

在BeautifulSoup中查找不同的字符串并返回包含标记

说我有以下HTML:

<p>
If everybody minded their own business, the world would go around a great deal faster than it does.
</p>

<p>
Who in the world am I? Ah, that's the great puzzle.
</p>
Run Code Online (Sandbox Code Playgroud)

我希望能够找到包含我正在寻找的所有关键字的所有标签.例如(示例2和3不起作用):

>>> len(soup.find_all(text="world"))
2

>>> len(soup.find_all(text="world puzzle"))
1

>>> len(soup.find_all(text="world puzzle book"))
0
Run Code Online (Sandbox Code Playgroud)

我一直试图想出一个正则表达式,允许我搜索所有关键字,但似乎ANDing是不可能的(只有ORing).

提前致谢!

python beautifulsoup

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

聚合函数返回AttributeError:'Sum'对象没有属性'lookup'

我正在尝试聚合函数,我得到了这个奇怪的结果(最新的官方Django 1.2版本).这是模型:

class Reputation(models.Model):
    user = models.ForeignKey(User)
    modifier = models.IntegerField()
    activity = models.ForeignKey(Activity)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

In [37]: Reputation.objects.aggregate(r=Sum('modifier'))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

C:\Data\Development\django_projects\oko\lib\site-packages\django\db\models\manager.pyc in aggregate(self, *args, **kwargs)
    142
    143     def aggregate(self, *args, **kwargs):
--> 144         return self.get_query_set().aggregate(*args, **kwargs)
    145
    146     def annotate(self, *args, **kwargs):

C:\Data\Development\django_projects\oko\lib\site-packages\django\db\models\query.pyc in aggregate(self, *args, **kwargs)
    315         for (alias, aggregate_expr) in kwargs.items():
    316             query.add_aggregate(aggregate_expr, self.model, alias,
--> 317                 is_summary=True)
    318
    319         return query.get_aggregation(using=self.db)

C:\Data\Development\django_projects\oko\lib\site-packages\django\db\models\sql\query.pyc in add_aggregate(self, aggregate, model, alias, is_summary)
    929         """
    930         opts = …
Run Code Online (Sandbox Code Playgroud)

django django-queryset

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