小编Chr*_*tof的帖子

使用PHP手动解析原始的multipart/form-data数据

我似乎无法找到这个问题的真正答案,所以我在这里:

如何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 :)

php parsing curl http

30
推荐指数
3
解决办法
4万
查看次数

VueJs子组件道具不能立即更新

我有一个父/子组件设置,其中父级正在从服务器加载数据并通过道具将其传递给子级.在孩子中,我想实例化一个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)

asynchronous vue.js vue-component

13
推荐指数
3
解决办法
3万
查看次数

Django Rest框架JWT单元测试

我正在使用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客户端将在生产中相同.

python django jwt django-rest-framework

10
推荐指数
3
解决办法
3544
查看次数

使用 django-filter 检查并清除过滤器

我正在使用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)

django django-filter

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

Linq 2 SQL:复合主键

我有一个带有两个外键的链接表。它们一起构成表的主键。我正在尝试在 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 查询手动插入键,效果很好,所以我假设我的表设置正确。奇怪的是,无论错误消息如何,插入都会起作用。

我检查了文档,对我来说,它听起来应该按照我的方式工作:

如果使用此属性指定多个类成员,则该键被称为关联列的组合。

对此有什么帮助吗?谢谢。

.net c# linq sql-server linq-to-sql

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

如何用PyCharm观察变量?

是否可以用PyCharm"观察"变量?我希望看到变量在循环中运行时所具有的值.

还是有类似的东西console.log()?我知道断点(我不想破坏)printpprint:).例如,单击打开列表或对象会很棒.

python debugging pycharm

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

Vuex:通过道具传递状态属性

我有一个组件应该显示来自商店的数据,但该组件是可重用的,所以我想通过道具传递商店模块的名称和属性名称,如下所示:

<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。

vue.js vuex

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

npm 仅在 Angular monorepo 中更改时发布

我有一个带有“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)

npm monorepo angular

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

适用于Titanium Mobile的JavaScript库/框架

我刚刚在Titanium Mobile的移动开发中迈出了第一步.来自PHP和JavaScript的网络编程,我真的错过了两件事:

  1. 一个JavaScript库
  2. MVC或类似的"框架",以有效地分离逻辑和设计

我一直在谷歌上搜索,似乎找不到一个好的答案.我尝试从我想要的MooTools中获取部件,但这并没有真正起作用,因为这几乎所有JS库都失败了,即使是核心部件也需要窗口/导航器/ dom等等.我猜这可以手动完成,但这听起来不像是一种面向未来的方式.

有人知道一个好的库捆绑了一些最常用的功能,或者更好的是,知道如何让MooTools核心在Titanium中工作?

2.简化为Titanium Mobile编写漂亮的结构化代码的东西.我可以手动执行此操作并且我已经阅读了这个问题,但我正在寻找已经找到最佳方法的东西/某人:)甚至可能会编写一些可以重复使用的代码.

谢谢你的建议.

javascript mobile titanium

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

vue-router用subRoute替换父视图

我正在使用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组件,并将事件分派回用户列表。

谢谢!

javascript vue.js vue-router

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

布局问题Titanium Mobile

我在Titanium Mobile(iPhone)中使用GUI的布局遇到了一些麻烦.是否有某个指南/文章解释高度/宽度/定位/滚动/等.适用于Titanium Mobile?

现在我遇到两个问题:

  1. 我想要一个可滚动的窗口,顶部有一个ImageView,下面有一个TableView.他们应该滚动在一起.我尝试将它们都添加到ScrollView并将ScrollView拉伸到窗口的大小,但是ImageView固定在屏幕的顶部,而TableView可以在屏幕的下半部分滚动,而所有内容都应该滚动在窗口内.

  2. 我想创建一个可编辑的分组TableView,类似于iPhone上的"Contacts"应用程序.对于左侧的蓝色标签,我创建了一个标签并将它们添加到TableRow,然后为该行的其余部分添加了一个文本字段.这是有效的,但是可以给标签一个"自动"宽度足够大以适应文本和左右一点填充,并在右侧填充文本字段以填充行的其余部分(我尝试设置标签的宽度为'auto',这不起作用).

我希望我的问题很清楚,否则请留言,我会在视觉上制作一些描述问题的截图.

谢谢你的帮助!

iphone mobile layout user-interface titanium

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