小编Gio*_*lia的帖子

决定何时使用Python Social Auth刷新OAUTH2令牌

我认为这主要是关于最佳实践的问题.

我有一个OAUTH2提供程序,只要刷新令牌就会发出访问令牌(有效期为10小时).

我在这里发现刷新访问令牌非常容易,但我无法理解如何确定何时刷新.

简单的答案可能是"当它不再起作用时",这意味着当我从后端获得HTTP 401时.这个解决方案的问题在于效率不高,而且我只能假设因为令牌已过期而得到401.

我的django应用程序我发现user social auth有一个Extra data字段包含这样的东西:

{ "scope": "read write", "expires": 36000, "refresh_token": "xxxxxxxxxxxxx", "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "token_type": "Bearer" }

但我不确定如何使用该expires字段.

所以我的问题是:我怎么知道访问令牌是否已经过期而我需要刷新它?

编辑:我刚刚发现此评论似乎相关,但我无法理解如何在管道中插入这个新功能,以便在令牌刷新期间工作.

python django oauth-2.0 python-social-auth

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

Django:只能填写两个字段中的一个

我有这个型号:

class Journals(models.Model):
    jid = models.AutoField(primary_key=True)
    code = models.CharField("Code", max_length=50)
    name = models.CharField("Name", max_length=2000)
    publisher = models.CharField("Publisher", max_length=2000)
    price_euro = models.CharField("Euro", max_length=2000)
    price_dollars = models.CharField("Dollars", max_length=2000)
Run Code Online (Sandbox Code Playgroud)

有没有办法让人们填写price_europrice_dollars

我知道解决问题的最好方法是只有一个字段和另一个指定货币的表,但我有约束而且我无法修改数据库.

谢谢!

django django-models

7
推荐指数
3
解决办法
3229
查看次数

烧瓶单元测试:修改会话后发送cookie

我正在为我的烧瓶应用程序编写一些单元测试,我需要模拟来自登录用户的请求(我正在使用烧瓶登录).

我在这里学到 要做到这一点,我需要修改会话并添加用户ID和_fresh参数:

with app.test_client() as c:
    with c.session_transaction() as sess:
        sess['user_id'] = 'myuserid'
        sess['_fresh'] = True
    resp = c.get('/someurl')
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要将一些其他cookie与请求一起发送.就像是

headers = Headers({'Cookie':'MYCOOKIE=cookie_value;'})
with app.test_client() as c:
    with c.session_transaction() as sess:
        sess['user_id'] = 'myuserid'
        sess['_fresh'] = True
    resp = c.get('/someurl', headers=headers)
Run Code Online (Sandbox Code Playgroud)

但是当我执行此请求时,会话与我设置的变量一起"消失".

我认为(和IRC上的其他人有相同的想法)这是因为我对cookie标题的明确定义会覆盖包含cookie的标题session.

我的问题是:有没有办法设置我的cookie而不删除session它?

如果没有,是否有办法session在修改会话后提取cookie,以便我可以手动将其添加到headers对象中的cookie列表中?

python cookies session flask flask-login

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

Django:覆盖RelatedFieldWidgetWrapper

我想更改管理站点中外键的“ +”图标的显示方式。

我发现打印代码的小部件RelatedFieldWidgetWrapper位于中django/contrib/admin/widgets.py

因此,我编写了该类的版本,并更改​​了其render功能。

但是现在我该如何使用呢?我的意思是...在我的模型定义中,我是否必须以formfield_overrides这种方式使用?

formfield_overrides = {
        models.ForeignKey: {'widget': customRelatedFieldWidgetWrapper},
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是正确的方法,因为该小部件不是管理整个外键的小部件,而仅是“ +”图标。我错了吗?

非常感谢。

django django-forms django-admin

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

postgresql:tableA或tableB的外键

我试图找出如何使用Postgresql 8定义数据库的模式.

我有2张桌子:

Journals, Books

定义我的出版物

Journal:
id_j, name, issn, other fields

Book:
id_b, name, isbn, author, other fields
Run Code Online (Sandbox Code Playgroud)

我有另一个表Scans在逻辑上引用前面的表.

Scans:
id, medium, source, status
Run Code Online (Sandbox Code Playgroud)

每个JournalBook可以有多个Scan,但每个Scan只能引用一个JournalBook.

正式这一点,我的第一个想法是把两个外键的Scans

Scans:
id, medium, source, status, id_j, id_b
Run Code Online (Sandbox Code Playgroud)

并填写id_jid_b

但这个解决方案在我看来有点奇怪.

我不希望(如果可能的话)以这样的方式定义表:

Scans:
id, medium, source, status, id_other_table, other_table_name
Run Code Online (Sandbox Code Playgroud)

因为我希望表之间有正式的联系.

任何的想法?

sql database postgresql database-design

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

Flask-WTForms:如何检查是否需要字段?

我用以下方式定义了一个表单:

class LoginForm(Form):
    login = EmailField(u'Email address', [required(), length(min=5, max=2048), validators.Email()])
    password = PasswordField(u'Password', [required(), length(min=6, max=50)])
    next = HiddenField()
    remember = BooleanField('Remember me')
    submit = SubmitField('Login')
Run Code Online (Sandbox Code Playgroud)

然后我在Jinja2中编写一个通用宏来渲染表单字段,我想做的事情如下:

{% if field.is_required() %}
  {{ field.label(class_='required') }}
{% else %}
  {{ field.label() }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

那么......有没有办法看看是否需要一个字段?

python templates jinja2 flask flask-wtforms

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

如何获取 Jinja2 模板中的参数列表

如何获取传递给 Jinja2 模板的所有参数的列表?

如果我有一个非常通用的模板并且我想列出所有传递的参数(出于调试原因),有没有办法做到这一点?

就像是:

mytemplate.html

{% for argument in LIST_OF_ARGUMENT %}
    {{ argument }}<br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

所以在视图中 /foobar

如果我以这种方式调用模板:

return render_template('mytemplate.html', form=myform, foo='bar')
Run Code Online (Sandbox Code Playgroud)

我得到

the_content_of_form <br>
bar <br>
Run Code Online (Sandbox Code Playgroud)

而如果我以这种方式调用模板:

return render_template('mytemplate.html', lorem=ipsum, fooooo='barrrrr')
Run Code Online (Sandbox Code Playgroud)

我得到

the_content_of_lorem <br>
barrrrr <br>
Run Code Online (Sandbox Code Playgroud)

python templates jinja2 flask

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

在bottlepy after_request挂钩中访问响应对象

我有以下网络应用程序:

import bottle
app = bottle.Bottle()

@app.route('/ping')
def ping():
    print 'pong'
    return 'pong'

@app.hook('after_request')
def after():
    print 'foo'
    print bottle.response.body

if __name__ == "__main__":
    app.run(host='0.0.0.0', port='9999', server='cherrypy')
Run Code Online (Sandbox Code Playgroud)

有没有办法在发回响应之前访问响应正文?

如果我启动应用程序并进行查询/ping,我可以在控制台中看到ping()after()函数和函数以正确的顺序运行

$ python bottle_after_request.py 
Bottle v0.11.6 server starting up (using CherryPyServer())...
Listening on http://0.0.0.0:9999/
Hit Ctrl-C to quit.

pong
foo
Run Code Online (Sandbox Code Playgroud)

但是当after()我试图访问时response.body,我什么都没有.

在Flask中,after_request修饰函数接受输入响应对象,因此很容易访问它.我怎么能在瓶子里做同样的事情?

有什么我想念的吗?

python bottle

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

在Jenkins中为下一个版本传递Git SHA1提交ID

考虑一系列工作:A - B - C.

我可以通过在A中添加"构建的传递Git提交"参数来参数化以使用与A相同的git提交SHA1来构建B.但是,这仅适用于后续作业.

现在,让我们说吧

A使用项目http://www.github.com/myuser/project_A

B使用项目http://www.github.com/myuser/project_B

C使用项目http://www.github.com/myuser/project_A

所以我想做的是使用A中使用的相同SHA1构建C.

我找到的唯一方法是将SHA1从A传递给B作为具有不同名称的参数

GIT_MY_PARAMETER=$GIT_COMMIT
Run Code Online (Sandbox Code Playgroud)

然后将tis参数从B传递给C.

GIT_MY_PARAMETER =$GIT_MY_PARAMETER
Run Code Online (Sandbox Code Playgroud)

然后在CI中以这种方式配置git:

Branches to build    Branch Specifier (blank for 'any')   ${GIT_MY_PARAMETER}
Run Code Online (Sandbox Code Playgroud)

它有效,但我的印象是它不是完美的解决方案.

有没有一个使用git插件的正确方法?

git jenkins jenkins-plugins

5
推荐指数
0
解决办法
4350
查看次数

LINUX arm64 docker 上的 Android SDK

我最近改用了 M1 MacBook Pro,并且正在努力了解如何重新构建部分开发环境:使用 fastlane 构建 Android 应用程序的 Linux Docker 映像。

如果我amd64通过 Rosetta 仿真在 Docker 上运行该映像,它可以工作,但速度非常慢(大约慢 6-10 倍)。

我研究了一些是否可以创建arm64图像并找到了一些答案。

  • 这里有一些关于它的研究
  • 这里有一个旧的 docker 镜像应该可以工作

但我尝试过的任何方法都不起作用(即使我能够构建图像)。

我遇到的主要问题是,整个 Android SDK 工具链仅适用于amd64,即使 Debian 至少有一个为编译的平台arm64,我也需要安装最后 6-7 个平台,所以一旦我添加任何内容sdkmanager,安装的新平台工具包含为其编译的二进制文件,amd64这显然不起作用。

有没有人找到一个(不太讨厌的)黑客来运行最新的 Android SDK 平台arm64

我也愿意从源代码编译整个工具链,但我不确定应该为每个平台构建哪个版本的工具以及如何配置单个平台来使用它们。

android android-sdk-tools docker

5
推荐指数
0
解决办法
1079
查看次数