我似乎无法找到这个问题的真正答案,所以我在这里:
如何multipart/form-data
在PHP中以格式解析原始HTTP请求数据?我知道如果格式正确,原始POST会自动解析,但我所指的数据来自PUT请求,而PHP不会自动解析.数据是多部分的,看起来像:
------------------------------b2449e94a11c
Content-Disposition: form-data; name="user_id"
3
------------------------------b2449e94a11c
Content-Disposition: form-data; name="post_id"
5
------------------------------b2449e94a11c
Content-Disposition: form-data; name="image"; filename="/tmp/current_file"
Content-Type: application/octet-stream
?????JFIF?????????... a bunch of binary data
Run Code Online (Sandbox Code Playgroud)
我正在使用libcurl发送数据(伪代码):
curl_setopt_array(
CURLOPT_POSTFIELDS => array(
'user_id' => 3,
'post_id' => 5,
'image' => '@/tmp/current_file'),
CURLOPT_CUSTOMREQUEST => 'PUT'
);
Run Code Online (Sandbox Code Playgroud)
如果我删除了CURLOPT_CUSTOMREQUEST位,请求将作为服务器上的POST处理,并且所有内容都被解析得很好.
有没有办法手动调用PHP的HTTP数据解析器或其他一些很好的方法来做到这一点?是的,我必须发送请求作为PUT :)
我有一个父/子组件设置,其中父级正在从服务器加载数据并通过道具将其传递给子级.在孩子中,我想实例化一个jQuery日历,其中包含从父级接收的一些数据.
为了在设置日历之前等待数据,我在父节目中广播了一个事件,我在子节目中设置了事件监听器.
听众正在被孩子开枪,但是如果我this.$log('theProp')
,那就是未定义的.但是,如果我使用VueJs devtools检查组件,那么父/子关系就在那里,而孩子在此期间已收到道具.
支柱在儿童身上被定义为动态支柱:the-prop="theProp"
.由于孩子最终收到道具,我假设我的设置是正确的,但似乎有某种延迟.父母在ajax调用的return函数中设置了props,并且再次:它正在工作,只是稍有延迟.
我还尝试watch
在孩子的道具上注册听众,这样我就可以设置日历,并确保道具在那里.但是,手表监听器会触发,但this.$log('theProp')
仍未定义.
如果我将数据与广播呼叫一起传递,就像this.$broadcast('dataLoaded', theData)
孩子接收它一样.但是这样做似乎是错误的,因为我基本上构建了自己的道具处理程序.
我没有发布任何代码,因为组件相当大,而VueJs devtools告诉我父/子情况正在发挥作用.
我错过了一些信息吗?设置父级值和接收它的子级之间是否有轻微延迟?在孩子中等待父数据的正确方法是什么?
通常,当您只是将数据渲染到模板中时,时间并不重要,因为数据绑定到模板.但在这种情况下,我真的需要数据来设置日历,否则将是错误的.
谢谢.
编辑1:这是一个jsfiddle:https : //jsfiddle.net/dr3djo0u/1/
似乎确认广播后数据不可用.然而,观察者确实有效,但我几乎可以发誓当我设置该测试用例时有时会this.$log('someData')
返回undefined
.
但我想我的问题可能在其他地方,今晚我会看看,现在没有我的项目.
编辑2:做了一些更多的测试.我的问题是a)事件监听器似乎没有立即接收到数据b)我还试图在route.data
回调中初始化日历(如果someData
已经来自父级),但是该路由回调在之前调用组件准备好了,所以它也没有在那里工作.
我现在的解决方案是:
// works when the child route is loaded directly and parent finishes loading someData
watch: {
someData() {
this.initCalendar();
}
},
// works when navigating from parent (data already loaded)
ready() {
if (this.someData && this.someData.length) {
this.initCalendar()
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用DRF和JWT包进行身份验证.现在,我正在尝试编写一个使用JWT令牌验证自身的单元测试.无论我如何尝试,我都无法让测试API客户端通过JWT进行身份验证.如果我对API客户端(在我的情况下,Postman)也这样做,一切正常.
这是测试用例:
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework_jwt.settings import api_settings
from backend.factories import member_factory
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
class MemberTests(APITestCase):
def test_get_member(self):
member = member_factory()
payload = jwt_payload_handler(member.user)
token = jwt_encode_handler(payload)
self.client.credentials(Authorization='JWT {0}'.format(token))
response = self.client.get(reverse('member-detail', kwargs={'pk': member.pk}))
assert response.status_code == 200
Run Code Online (Sandbox Code Playgroud)
但我总是得到一个401 Authentication credentials were not provided
.
在response.request
我看到令牌在那里,它只是没有被应用我想.
如果我重写要使用的测试rest_framework.test.RequestsClient
并将其实际发送到live_server URL,它就可以工作.
对此有何帮助?
PS我知道force_authenticate()
并登录但我想我的单元测试访问API与API客户端将在生产中相同.
我正在使用django-filter来过滤 a ListView
,并且希望在应用任何过滤器时显示“清除所有过滤器”链接。
由于过滤系统的通用性,我还没有找到实现此目的的直接方法。
到目前为止,我唯一想到的是,get_queryset
如果请求中存在“清除”标志,则在视图方法中返回常规查询集,但这实际上并没有清除过滤器 - 它只是返回所有数据。
有人对此有解决方案/想法吗?
更新:解决方案
在 Jerin 发表评论后,我决定分两个部分解决这个问题:
有过滤器:
我检查请求中是否包含我在过滤器类中定义的任何字段。我的解决方案看起来有点不同,因为我使用的是基于类的视图,所以我将其抽象到 mixin 中,但如果您使用像这里这样的简单视图,您可以这样做:
def product_list(request):
f = ProductFilter(request.GET, queryset=Product.objects.all())
has_filter = any(field in request.GET for field in
set(f.get_fields()))
return render(request, 'my_app/template.html', {
'filter': f,
'has_filter': has_filter
})
Run Code Online (Sandbox Code Playgroud)
清除所有过滤器:
一个简单的重定向到您的列表视图:
{% if has_filter %}
<a href="{% url 'products' %}">{% trans 'Clear all filters' %}</a>
{% endif %}
Run Code Online (Sandbox Code Playgroud) 我有一个带有两个外键的链接表。它们一起构成表的主键。我正在尝试在 Linq 中映射它:
[Table(Name = "PartToPart")]
public class PartToPart
{
[Column(Name = "PartID", IsPrimaryKey = true )]
public int PartID { get; set; }
[Column(Name = "ParentPartID", IsPrimaryKey = true)]
public int ParentPartID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我假设这是错误的,并且让 Linq 假设两列都是它们自己的主键?如果我尝试将新条目保存到该表中,则会收到约束冲突错误:
违反主键约束...无法在对象 dbo.PartToPart 中插入重复键。重复的键值是...
我尝试通过 INSERT 查询手动插入键,效果很好,所以我假设我的表设置正确。奇怪的是,无论错误消息如何,插入都会起作用。
我检查了文档,对我来说,它听起来应该按照我的方式工作:
如果使用此属性指定多个类成员,则该键被称为关联列的组合。
对此有什么帮助吗?谢谢。
是否可以用PyCharm"观察"变量?我希望看到变量在循环中运行时所具有的值.
还是有类似的东西console.log()
?我知道断点(我不想破坏)print
和pprint
:).例如,单击打开列表或对象会很棒.
我有一个组件应该显示来自商店的数据,但该组件是可重用的,所以我想通过道具传递商店模块的名称和属性名称,如下所示:
<thingy module="module1" section="person">
Run Code Online (Sandbox Code Playgroud)
然后,在组件中:
<template>
<h2>{{ title }}</h2>
<p>{{ message }}</p>
</template>
<script>
import { mapState } from 'vuex'
import get from 'lodash.get'
export default {
props: [
'module',
'section'
],
computed: mapState(this.module, {
title: state => get(state, `${this.section}.title`),
message: state => get(state, `${this.section}.message`)
})
}
</script>
Run Code Online (Sandbox Code Playgroud)
问题是,似乎道具在mapState()
执行时未定义。如果我对 prop 值进行硬编码,则组件可以工作。此外,如果我在created()
钩子中记录道具,我会得到预期值。所以这似乎是一个竞争条件。
我在这里以错误的方式解决这个问题吗?
更新
模块命名空间必须从映射函数内部传递,如下所示:
computed: mapState({
title() {
return get(this.$store.state, `${this.module}.${this.section}.title`)
},
message() {
return get(this.$store.state, `${this.module}.${this.section}.message`)
}
})
Run Code Online (Sandbox Code Playgroud)
(请注意,这get()
是一个 lodash,而不是一个 vue 函数)
这可以进一步抽象为mixin。
我有一个带有“app”和一个库的 Angular monorepo,它作为自己的 npm 包发布。这是在 CI 环境中自动完成的。到目前为止,库和应用程序都是分开的,并且有单独的构建作业。现在它们是一起构建的,我面临的问题是每次构建(对 的每次更改master
)都会发布库,即使更改可能已经(并且很可能是)在应用程序中。
如果 npm 包的内容自上次发布以来发生了更改,是否有一种简单的方法来仅发布该包?
如果我运行,npm info <the-package>
会有一个.shasum
和.integrity
校验和,我希望在运行时可以将它们与相同的值进行比较npm publish <directory> --dry-run
。不幸的是,即使包的内容完全相同,这些命令也会产生不同的校验和。**
** 为了验证这一点,我将发布的 tarball 的内容与新构建的 dist/ 版本的库进行了比较。两个目录上的Adiff -r
没有显示任何差异。
更新
由于缺乏更好的想法,我在 bash 中编写了一个手动解决方案(因为无论如何我的库的发布都是在 bash 脚本中进行的)。因为在我的例子中,每个版本都被标记,所以我得到最后一个标记的提交,并检查自那时以来库中是否有任何更改。这绝不是一个好的解决方案,您可能不应该使用它,但如果它对某人有帮助:
PATH_TO_LIB='./projects/the-lib'
# find the last tagged commit and assume it was the last release
TAG=$(git describe --abbrev=0)
COMMIT=$(git rev-list -n 1 $TAG)
# check if anything changed in the lib since the last release
CHANGED=$(git diff --name-only HEAD …
Run Code Online (Sandbox Code Playgroud) 我刚刚在Titanium Mobile的移动开发中迈出了第一步.来自PHP和JavaScript的网络编程,我真的错过了两件事:
我一直在谷歌上搜索,似乎找不到一个好的答案.我尝试从我想要的MooTools中获取部件,但这并没有真正起作用,因为这几乎所有JS库都失败了,即使是核心部件也需要窗口/导航器/ dom等等.我猜这可以手动完成,但这听起来不像是一种面向未来的方式.
有人知道一个好的库捆绑了一些最常用的功能,或者更好的是,知道如何让MooTools核心在Titanium中工作?
2.简化为Titanium Mobile编写漂亮的结构化代码的东西.我可以手动执行此操作并且我已经阅读了这个问题,但我正在寻找已经找到最佳方法的东西/某人:)甚至可能会编写一些可以重复使用的代码.
谢谢你的建议.
我正在使用vue-router,对子路由有疑问。我想设置路由,以便主要路由是列表,子路由是诸如edit / add / etc之类的东西。
我希望subRoute组件替换<router-view>
父路由。从我对文档的理解以及经过测试的方式来看,我似乎应该<router-view>
在父组件模板中为要呈现给subRoute的模板定义另一个,但是用户列表仍然可见。
路线示例:
'/users': {
name: 'user-list',
component(resolve) {
require(['./components/users.vue'], resolve)
},
subRoutes: {
'/add': {
name: 'add-user',
component(resolve) {
require(['./components/users_add.vue'], resolve)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
主路由器视图:
<!-- main router view -->
<div id="app">
<router-view></router-view>
</div>
Run Code Online (Sandbox Code Playgroud)
用户列表:
<template>
<a v-link="{ name: 'add-user' }">Add</a>
<ul>
<li>{{ name }}</li>
</ul>
</template>
Run Code Online (Sandbox Code Playgroud)
添加用户:
<template>
<div>
<a v-link="{ name: 'user-list' }">back</a>
<input type="text" v-model="name">
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
当我点击“添加”时,我想被添加用户模板所填充。这可能吗?
另外,我可以在用户列表和添加用户组件之间建立父子关系吗?我希望能够将道具(用户列表)传递给add组件,并将事件分派回用户列表。
谢谢!
我在Titanium Mobile(iPhone)中使用GUI的布局遇到了一些麻烦.是否有某个指南/文章解释高度/宽度/定位/滚动/等.适用于Titanium Mobile?
现在我遇到两个问题:
我想要一个可滚动的窗口,顶部有一个ImageView,下面有一个TableView.他们应该滚动在一起.我尝试将它们都添加到ScrollView并将ScrollView拉伸到窗口的大小,但是ImageView固定在屏幕的顶部,而TableView可以在屏幕的下半部分滚动,而所有内容都应该滚动在窗口内.
我想创建一个可编辑的分组TableView,类似于iPhone上的"Contacts"应用程序.对于左侧的蓝色标签,我创建了一个标签并将它们添加到TableRow,然后为该行的其余部分添加了一个文本字段.这是有效的,但是可以给标签一个"自动"宽度足够大以适应文本和左右一点填充,并在右侧填充文本字段以填充行的其余部分(我尝试设置标签的宽度为'auto',这不起作用).
我希望我的问题很清楚,否则请留言,我会在视觉上制作一些描述问题的截图.
谢谢你的帮助!