我的Django应用程序使用Rest Framework JWT进行身份验证.它非常优雅,非常优雅.
但是,我有一个用例,我正在努力构建.我已经为"忘记密码"工作流程编写了一个可行的解决方案.如果他们点击我发送到他们的电子邮件地址的秘密链接,我允许未经身份验证的用户重置密码.但是,我想修改此解决方案,以便在密码重置工作流程成功完成后,用户将自动登录,而无需重新键入其用户名和(新)密码.我想这样做是为了让用户的体验尽可能无摩擦.
问题是我不知道如何在没有用户重新输入密码的情况下完成这项工作(或者将其以明文形式存储在DB中,这显然非常糟糕).以下是我获得JWT令牌的当前方式.您可以在第12行看到我需要用户的明确密码.我没有.我只存储了加密密码my_user.password.
如何使用my_user.password中的加密密码而不是clear密码来获取JWT?如果我不能使用它,那么如何使用Rest Framework JWT实现此工作流程?
from rest_framework_jwt.views import ObtainJSONWebToken
from rest_framework status
from django.contrib.auth.models import User
my_user = User.objects.get(pk=1)
ojwt = ObtainJSONWebToken()
if "_mutable" in dir(request.DATA):
mutable = request.DATA._mutable
request.DATA._mutable = True
request.DATA['username'] = my_user.username
request.DATA['password'] = "<my_user's clear password>"
if "_mutable" in dir(request.DATA):
request.DATA._mutable = mutable
token_response = ojwt.post(request)
if status.is_success(token_response.status_code):
# Tell the user login succeeded!!
else:
# Tell the user login failed.
# But hopefully, this shouldn't …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照这些说明使用Packer.io构建基本的AWS镜像.但这对我不起作用.
这是我的模板文件:
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-east-1",
"source_ami": "ami-146e2a7c",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-example {{timestamp}}",
# The following 2 lines don't appear in the tutorial.
# But I had to add them because it said this source AMI
# must be launched inside a VPC.
"vpc_id": "vpc-98765432",
"subnet_id": "subnet-12345678"
}]
}
Run Code Online (Sandbox Code Playgroud)
您会注意到我必须通过在底部添加两条线(对于VPC和子网)来偏离指令.这是因为我不断收到以下错误:
==> amazon-ebs: Error launching source instance: The specified instance type …Run Code Online (Sandbox Code Playgroud) 我已经使用d3.js在SVG容器上绘制了一些圆圈.
我已成功在这些圆圈上设置鼠标悬停行为以打印简单的控制台消息.当我鼠标悬停(和mouseout)时,我看到那些控制台消息,所以我知道它们正常工作.
但是,我不想打印那些控制台消息,而是在鼠标悬停时将光标更改为手,我想在鼠标移出时将光标更改回正常箭头.鉴于我的代码如下,我该怎么做?
在鼠标悬停时,我知道我需要将样式属性更改cursor为pointer和鼠标输出,我知道我需要将其更改为default但我不知道应该如何操作的语法.有人可以向我解释一下吗?以下是我的代码.
var myCircle = svgContainer.selectAll(".dots")
.data(myDataList).enter().append("circle")
.attr("class", "dots")
.attr("cx", function(d, i) {return d.centerX})
.attr("cy", function(d, i) {return d.centerY})
.attr("r", 5)
.attr("stroke-width", 0)
.attr("fill", function(d, i) {return "red"})
.style("display", "block");
myCircle.on({
"mouseover": function(d) {
console.log('Hello World!'); // What do I change this to?
},
"mouseout": function(d) {
console.log('Goodbye World!'); // What do I change this to?
}
}
);
Run Code Online (Sandbox Code Playgroud) 我的问题与这个问题密切相关.
我正在使用Requests库来命中HTTP端点.我想检查一下响应是否成功.
我目前正在这样做:
r = requests.get(url)
if 200 <= response.status_code <= 299:
# Do something here!
Run Code Online (Sandbox Code Playgroud)
而不是对200到299之间的值进行那种丑陋的检查,我可以用一个简写吗?
我的Django的应用程序有一个requirements.txt文件(如图所示这里),我用我的虚拟环境中安装的模块.一切正常.
但是,我现在正在尝试将django-mptt从0.6.1升级到最新版本.(其实我不在乎升级Django的MPTT.我只是想升级版本的Django的,但它似乎升级Django的,所描述的我必须先升级Django的MPTT 这里).所以我这样做pip install -U django-mptt.这导致django-mptt从0.6.1变为0.7.4,Django从1.7.1变为1.8.2.它还会导致django-cache-machine从origin到master.您可以在下面的屏幕截图中看到更改.
然后当我这样做manage.py runserver然后提示我迁移.所以我这样做.没问题.但是随后如果我删除所有表然后再次运行迁移,我在迁移期间会收到此错误:
django.db.utils.OperationalError:
(1005, 'Can\'t create table `mydb_instance`.`#sql-21b_1e`
(errno: 150 "Foreign key constraint is incorrectly formed")')
Run Code Online (Sandbox Code Playgroud)
完整堆栈跟踪在这里.
这个错误是什么?是否与我使用MariaDB(服务器版本:10.0.15-MariaDB Homebrew)而不是MySQL作为我的数据库这一事实有关?

编辑:以下部分该点已于2015年7月6日5:28 UTC添加
我在上面提到过,升级后,我被提示进行迁移.奇怪的是,即使升级MPTT不会导致创建任何新的迁移文件,也会发生这种情况!当我这样做时manage.py runserver,我收到了以下警告信息.为什么?这没有道理:
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
Run Code Online (Sandbox Code Playgroud)
编辑:以下部分该部分已于2015年7月6日17:00 UTC加入
作为实验,我将基础数据库从MariaDB切换到MySQL(服务器版本:5.6.25).问题依然存在.我得到的错误是Cannot add foreign key constraint.完整的堆栈跟踪在这里.
编辑:这个点以下这个点在2015年7月6日在17:05 UTC上添加
通过我在5分钟前发布的堆栈跟踪,我发现错误是由以下SQL语句触发的:
ALTER TABLE `myapp2_mymodel2` ADD CONSTRAINT …Run Code Online (Sandbox Code Playgroud) 我在Mac OS X 10.10上.
我注意到我的硬盘正在填满,因为每隔几分钟就会出现一个新的核心转储文件/cores:
$ ls -alhtr /cores
total 3551488
-rw-r--r--@ 1 saqib admin 6.0K Apr 24 12:38 .DS_Store
drwxr-xr-x 32 root admin 1.1K Aug 1 17:00 ../
-r-------- 1 saqib admin 578M Aug 1 22:36 core.35049
-r-------- 1 saqib admin 578M Aug 1 22:37 core.35202
drwxrwxr-t@ 6 root admin 204B Aug 1 22:38 ./
-r-------- 1 saqib admin 578M Aug 1 22:38 core.35438
Run Code Online (Sandbox Code Playgroud)
但我不知道哪些进程正在创建这些核心文件.文件名中的数字应该表示创建它们的进程的PID.但当然这些过程现在已经死了.那么我怎样才能确定哪个进程正在创建这些内核以便我可以修复/删除它?
编辑1
这样做gdb -c的核心文件不给我我需要的信息:
$ gdb -c /cores/core.35438
GNU gdb (GDB) …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为的S3存储桶 x.y.z
在这个桶中,我有数百个文件.但我只想删除2个名为purple.gif和的文件worksheet.xlsx
我可以通过一次调用从AWS命令行工具执行此操作rm吗?
这不起作用:
$ aws s3 rm s3://x.y.z/worksheet.xlsx s3://x.y.z/purple.gif
Unknown options: s3://x.y.z/purple.gif
Run Code Online (Sandbox Code Playgroud)
从手册中,您似乎无法按名称明确删除文件列表.有谁知道这样做的方法?我不喜欢使用--recursive旗帜.
我正在构建一个Django应用程序,它公开了一个REST API,用户可以通过它查询我的应用程序的模型.我按照这里的说明操作
我的路线在mySites url.py中看起来像这样:
router.register(r'myObjects', views.MyObjectsViewSet)
....
url(r'^api/', include(router.urls)),
Run Code Online (Sandbox Code Playgroud)
我的Serializer看起来像这样:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyObject
fields = ('id', 'name',)
Run Code Online (Sandbox Code Playgroud)
我的Viewset看起来像这样:
class MyObjectsViewSet(viewsets.ModelViewSet):
queryset = MyObjects.objects.all()
serializer_class = MyObjectSerializer
Run Code Online (Sandbox Code Playgroud)
当我点击API/api/myObjects /时,它给出了所有myObject模型的列表.当我点击API/api/myObjects/60 /时它只给我id = = 60的myObject.到目前为止很棒!
但是,我想改变MyObjectsViewSet()的逻辑,以便我可以操作/更改当我点击/ api/myObjects/60 /时返回的内容.因此,我不想做MyObjects.objects.all(),而是根据myObject ID为60做一些更复杂的事情.但是我怎么能这样做?在这个视图中,我怎么能抓住这个数字60?它不作为参数传递.但我真的需要它!
我有一个看起来像这样的Django表单:
class myForm(forms.Form):
email = forms.EmailField(
label="Email",
max_length=254,
required=True,
)
Run Code Online (Sandbox Code Playgroud)
我有一个关联的基于类的FormView,如下所示.我可以看到表单已经成功验证了数据,并且流程正在进入下面的form_valid()方法.我需要知道的是如何获取用户在电子邮件字段中提交的值.form.fields['email'].value不起作用.
class myFormView(FormView):
template_name = 'myTemplate.html'
form_class = myForm
success_url = "/blahblahblah"
def form_valid(self, form):
# How Do I get the submitted values of the form fields here?
# I would like to do a log.debug() of the email address?
return super(myFormView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud) 嗨我有一个Django模型如下:
class Address(models.Model):
geoCoords = models.PointField(null=True, blank=True,)
Run Code Online (Sandbox Code Playgroud)
现在我创建一个这个模型的实例:
A = Address()
Run Code Online (Sandbox Code Playgroud)
如何将A的geoCoord字段的坐标设置为(5.3,6.2)?我找不到以这种方式分配点字段的任何示例.这是一个非常简单的问题.实际上,我想分配给A.geoCord的坐标来自pygeocoder.它是一个2项元组的花车.
关于Django PointFields的文档基本上是不存在的.
django ×5
python ×4
amazon-s3 ×1
aws-cli ×1
coredump ×1
css ×1
d3.js ×1
django-forms ×1
django-mptt ×1
django-views ×1
geodjango ×1
http ×1
httprequest ×1
javascript ×1
jwt ×1
mouseover ×1
mysql ×1
osx-yosemite ×1
packer ×1
pid ×1
rest ×1
svg ×1
unix ×1