小编aww*_*ter的帖子

附加所有axios请求的Authorization标头

我有一个react/redux应用程序从api服务器获取令牌.在用户进行身份验证之后,我想让所有axios请求都将该令牌作为Authorization标头,而不必手动将其附加到操作中的每个请求.我是新手反应/ redux并不确定最好的方法,并没有在谷歌上找到任何质量点击.

这是我的redux设置:

// actions.js
import axios from 'axios';

export function loginUser(props) {
  const url = `https://api.mydomain.com/login/`;
  const { email, password } = props;
  const request = axios.post(url, { email, password });

  return {
    type: LOGIN_USER,
    payload: request
  };
}

export function fetchPages() {
  /* here is where I'd like the header to be attached automatically if the user
     has logged in */ 
  const request = axios.get(PAGES_URL);

  return {
    type: FETCH_PAGES,
    payload: request
  };
}

// reducers.js
const initialState = …
Run Code Online (Sandbox Code Playgroud)

reactjs redux axios

71
推荐指数
6
解决办法
8万
查看次数

使用ChoiceField的Django Rest框架

我的用户模型中有一些字段是选择字段,我正在试图找出如何最好地将其实现到Django Rest Framework中.

下面是一些简化的代码来展示我正在做的事情.

# models.py
class User(AbstractUser):
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )

    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)


# serializers.py 
class UserSerializer(serializers.ModelSerializer):
    gender = serializers.CharField(source='get_gender_display')

    class Meta:
        model = User


# viewsets.py
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

基本上我要做的是让get/post/put方法使用选择字段的显示值而不是代码,看起来像下面的JSON.

{
  'username': 'newtestuser',
  'email': 'newuser@email.com',
  'first_name': 'first',
  'last_name': 'last',
  'gender': 'Male'
  // instead of 'gender': 'M'
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?上面的代码不起作用.在我有这样的东西为GET工作之前,但对于POST/PUT它给了我错误.我正在寻找关于如何做到这一点的一般建议,看起来它会是常见的,但我找不到例子.或者我正在做一些非常错误的事情.

django django-rest-framework

54
推荐指数
7
解决办法
4万
查看次数

Django Rest框架在SerializerMethodField上排序

我有一个论坛主题模型,我想在计算的SerializerMethodField上订购,例如vote_count.以下是一个非常简化的Model,Serializer和ViewSet来显示问题:

# models.py
class Topic(models.Model):
    """
    An individual discussion post in the forum
    """
    title = models.CharField(max_length=60)

    def vote_count(self):
        """
        count the votes for the object
        """
        return TopicVote.objects.filter(topic=self).count()


# serializers.py
class TopicSerializer(serializers.ModelSerializer):
    vote_count = serializers.SerializerMethodField()

    def get_vote_count(self, obj):
        return obj.vote_count()

    class Meta:
        model = Topic


# views.py
class TopicViewSet(TopicMixin, viewsets.ModelViewSet):
    queryset = Topic.objects.all()
    serializer_class = TopicSerializer
Run Code Online (Sandbox Code Playgroud)

这是有效的:

  1. OrderingFilter默认打开,我可以成功订购 /topics?ordering=title
  2. vote_count函数完美运行

我试图通过TopicSerializer上的MethodField订购,/topics?ordering=-vote_count但是看起来似乎不支持.我有什么方法可以通过那个领域订购吗?

我简化的JSON响应如下所示:

{
    "id": 1,
    "title": "first post",
    "voteCount": 1
},
{ 
    "id": 2,
    "title": "second post", …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

14
推荐指数
1
解决办法
7184
查看次数

axios.post正在发送GET请求

我有一个使用react/axios的chrome扩展.在那个应用程序中,我发送一个帖子请求,如下所示:

export const createComment = payload => {
  const url = `${COMMENTS_BASE_URL}`;
  const promise = axios.post(url, payload);
  return { type: CREATE_COMMENT, promise };
}
Run Code Online (Sandbox Code Playgroud)

即使它显然是axios.post(),浏览器也会向URL发送GET请求,这是不允许的(响应405).我也试过使用axios({ method: 'post', ... })但是发送GET请求的浏览器也会发生同样的事情.

javascript reactjs axios

13
推荐指数
2
解决办法
4057
查看次数

更新条带数据量

我正在将Stripe实施到一个django网站,除了一部分外,一切正常.在我的购物车中,用户可以更新更改总数的项目.除了在Stripe Checkout js脚本上设置数据量之外,一切都正常工作.

当页面加载时,一切都很好,但是如果客户更改了他们的购物车,则数据量不会更新.我有另一个显示总数的框,这个数量更新很好.

<!-- here is the script tag in HTML-->
<script
id="stripe-script"
src="https://checkout.stripe.com/checkout.js" 
class="stripe-button"
data-image="{% static 'img/marketplace.png' %}"
data-key="{{ STRIPE_PUBLIC_KEY }}"
data-name="Serendipity Artisan Blends"
data-description="Purchase Items"
data-amount="{{ cart_stripe_total }}">
</script>
Run Code Online (Sandbox Code Playgroud)

然后我尝试更新的javascript是这样的:

function updateTotal(amount) {
    /* update the total in the cart in both the table cell and
        in the stripe button data-amount */
    var totalStr = shoppingTotalCell.text().replace('$', ''),
        originalTotal = parseFloat(totalStr),
        newTotal = originalTotal + amount,
        newTotalStripe = newTotal * 100,
        newTotalStr = newTotal.toFixed(2),
        script = $('#stripe-script'); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery stripe-payments

11
推荐指数
2
解决办法
8928
查看次数

Rest Framework Serializer方法

我有以下使用Django REST Framework的 Serializer .

这就是我到目前为止......

serializer.py

class ProductSerializer(serializers.ModelSerializer):

    score = serializers.SerializerMethodField('get_this_score')

    class Meta:
        model = Product
        fields = ('id', 'title', 'active', 'score')

    def get_this_score(self, obj):

        profile = Profile.objects.get(pk=19)
        score = [val for val in obj.attribute_answers.all() if val in profile.attribute_answers.all()]
        return (len(score))
Run Code Online (Sandbox Code Playgroud)

urls.py

 url(r'^products/(?P<profile_id>.+)/$', ProductListScore.as_view(), name='product-list-score'),
Run Code Online (Sandbox Code Playgroud)

这段代码存在一些问题.

1)pram pk = 19是硬编码的应该是self.kwargs['profile_id'].我尝试过但尝试过,但我不知道如何将kwarg传递给方法并且无法使profile_id工作.即我无法从网址获取.

2)这些代码中是否有任何代码?我已经尝试添加模型,但再次可以通过args.

models.py 即方法类

     def get_score(self, profile):

        score = [val for val in self.attribute_answers.all() if val in 
profile.attribute_answers.all()]
            return len(score)
Run Code Online (Sandbox Code Playgroud)

django django-models django-rest-framework

10
推荐指数
2
解决办法
1万
查看次数

限制ManyToManyField的最大选择

我试图限制模型记录在ManyToManyField中可以有的最大选择量.

在此示例中,有一个可以与Regions相关的BlogSite.在这个例子中,我想限制BlogSite只能有3个区域.

这似乎是之前会被问到/回答过的东西,但经过几个小时的探索之后,我找不到任何接近的东西.对于这个项目,我正在使用Django 1.3.

#models.py
class BlogSite(models.Model):
    blog_owner = models.ForeignKey(User)
    site_name = models.CharField(max_length=300)
    region = models.ManyToManyField('Region', blank=True, null=True)
    ....

class Region(models.Model):
    value = models.CharField(max_length=50)
    display_value = models.CharField(max_length=60)
    ....
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

django django-models

9
推荐指数
2
解决办法
4934
查看次数

Django Rest Framework对POST的对象级权限

我想确保request.user只能发出一个POST请求来创建一个论坛主题,在这个主题中他们是作者.使用PUT和DELETE我能够通过使用has_object_permission但是通过POST 来实现它我无法做到这一点,我猜测因为尚未创建对象.

class TopicPermission(IsAuthenticatedOrReadOnly):
    """
    Any user should be able to read topics but only authenticated 
    users should be able to create new topics. An owner or moderator 
    should be able to update a discussion or delete.
    """
    def has_object_permission(self, request, view, obj):
        if request.method in SAFE_METHODS:
            return True

        # Instance must have an attribute named `author` or moderator
        return obj.author == request.user or request.user.forum_moderator
Run Code Online (Sandbox Code Playgroud)

我如何request.user == obj.author在POST请求中进行验证?

django django-rest-framework

9
推荐指数
1
解决办法
931
查看次数

Django AWS Elastic Beanstalk迁移数据库

我正在使用Elastic Beanstalk将Django项目部署到AWS,但我仍然无法迁移数据库.

我在哪里:我能够成功部署我的django项目并通过mysubdomain.elasticbeanstalk.com加载页面.页面加载没有错误,直到我到达需要进行数据库调用的页面.然后我得到一个错误,relation "accounts_user" does not exist LINE 1: SELECT COUNT(*) FROM "accounts_user"因为我的数据库尚未迁移.

我尝试过的东西:我尝试了很多不同的东西.幸运的是,有大量的stackoverflow帖子和几个教程.不幸的是,他们似乎都在使用不同的版本,他们的建议并不适用于我的项目.

我很清楚,我需要在foobar.config文件.ebextensions/夹内的文件中运行迁移.这是我想要做的基础:

container_commands:
  01_migrate:
    command: "python manage.py migrate --noinput"
    leader_only: true
Run Code Online (Sandbox Code Playgroud)

在日志中,我看到后部署脚本尝试运行但失败了.我没有收到有关错误的任何其他信息,我唯一看到的是"错误:01_migrate部署后脚本失败"

我发现我需要激活命令的虚拟环境,这是有道理的.从asdf我试试这个:

container_commands:
  01_migrate:
    command: "source /opt/python/run/venv/bin/activate && python rlg/manage.py migrate --noinput"
    leader_only: true
Run Code Online (Sandbox Code Playgroud)

但它不起作用.事实上,通过SSH我发现我甚至没有/ opt/python /文件夹,只有/ opt/aws /和/ opt/elasticbeanstalk /.所有教程和SO问题都引用了这个文件夹,但我没有它?

版本:Python 3.4.1,Django 1.7.7,AWS CLI 3.2.1,Postgres 9.3

django amazon-web-services amazon-elastic-beanstalk

7
推荐指数
2
解决办法
2573
查看次数

rtk 查询的轮询间隔不起作用

我正在实现 rtk-query,并且库的轮询功能遇到问题。

### service.js
export const api = createApi({
  ...,
  endpoints: (builder) => ({
    getBlockPurchase: builder.query({
      query: (id) => `block-purchases/${id}/`,
    }),
  }),
});

### component.js
function BlockPurchaseComponent({ blockPurchaseId }) {
  const { data, error } = useGetBlockPurchaseQuery(blockPurchaseId, {
    pollingInterval: 3000,
  });

  ...
}
Run Code Online (Sandbox Code Playgroud)

查询一次可以正常工作,但后续的轮询请求不会发送。在文档中它看起来很简单,但看起来我错过了一些东西。请让我知道有助于找到解决方案的任何其他信息。

编辑:这是设置不正确的中间件:

const store = configureStore({
  reducer: persistedReducer,
  middleware: getDefaultMiddleware({
    serializableCheck: {
      ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
    },
    ...api.middleware,
  }),
});
Run Code Online (Sandbox Code Playgroud)

reactjs redux-toolkit rtk-query

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