如何为需要 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) 我有这些模型:
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的对话框成员.我想知道这是否可以动态完成?
我在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) 我正在遵循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变量.
提前致谢!
说我有以下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).
提前致谢!
我正在尝试聚合函数,我得到了这个奇怪的结果(最新的官方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 ×5
python ×2
foreign-keys ×1
oauth ×1
postgresql ×1
python-3.x ×1
ubuntu-16.04 ×1
unit-testing ×1