小编Joã*_*res的帖子

输入更改事件不适用于 Stimulus 或 Vanilla JS

我在模态中有一个带有 3 个输入的表单。前两个是小时,当第一个小时发生变化时,我需要更新第二个小时的值。

我已成功将 Stimulus 控制器连接到表单,并且可以在控制台中显示它。这是我的控制器代码:

import { Controller } from "stimulus"

export default class extends Controller {
  static targets = [ 'hour_start', 'hour_finish' ];

  connect() {
    console.log(this.hour_startTarget);
  }

  update() {
    alert('Changed');
  }
}
Run Code Online (Sandbox Code Playgroud)

连接工作正常并在控制台上打印:

<input class="form-control string required form-control datetimepicker" data-target="dtpicker.hour_start" data-action="change->dtpicker#update" required="required" aria-required="true" type="text" name="order[hour_start]" id="order_hour_start">
Run Code Online (Sandbox Code Playgroud)

但是当我更改此输入的值时,警报不会弹出......

我还尝试忽略更改,因为它是输入的默认操作,但警报仍然没有显示。

还尝试在 js 上使用普通事件监听器,如下所示:

const handleHourStart = () => {
  let hourStart = document.getElementById('order_hour_start'); 
  hourStart.addEventListener('change', () => {
    alert('Changed');
  })
}
Run Code Online (Sandbox Code Playgroud)

但还是不行。奇怪的是,点击事件的行为符合我的预期,但变化却没有......

有任何想法吗?

javascript ruby-on-rails stimulusjs

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

Sidekiq 不断对 CSRF 保护大喊大叫,但路由安装在 Rails.application.routes.draw 中

我有一个 Rails 6.0.3.5 API,我没有使用 Devise 进行身份验证。当我尝试访问 sidekiq UI 时,它大喊:

Sidekiq::Web needs a valid Rack session for CSRF protection. If this is a Rails app, make sure you mount Sidekiq::Web *inside* your application routes: Rails.application.routes.draw do mount Sidekiq::Web => "/sidekiq" .... end
Run Code Online (Sandbox Code Playgroud)

但实际上我的路线是这样的:

Rails.application.routes.draw do
  mount Sidekiq::Web => '/sidekiq'

  namespace :api do
    namespace :v1 do
     ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经config/initializers/sidekiq.rb像这样保护了用户/通行证的路线:

require 'sidekiq'
require 'sidekiq/web'
Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|  
  Rack::Utils.secure_compare(::Digest::SHA256.hexdigest(user), ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_USER"])) &
    Rack::Utils.secure_compare(::Digest::SHA256.hexdigest(password), ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_PASSWORD"]))
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sidekiq ruby-on-rails-6

5
推荐指数
2
解决办法
1139
查看次数

Django 如何在请求中传递基本授权标头?

我完全是 Django 的初学者(来自 Node/Express 背景)。我需要调用使用基本授权的 API。

为了发出请求,我正在使用请求模块,但我不知道在哪里传递身份验证标头。在 Axios 中,我通常设置默认标头,如下所示:

import axios from 'axios'
const token = `Basic ${Buffer.from(`${process.env.API_USERNAME}:${process.env.API_PASSWORD}`).toString('base64')}`;
axios.defaults.baseURL = process.env.API_URL;
axios.defaults.headers.common['Authorization'] = token;
Run Code Online (Sandbox Code Playgroud)

我在 Django 中的服务:

from base64 import b64encode
import requests
import environ
environ.Env.read_env()

endpoint = 'some url'
credentials = f"{env('API_USERNAME')}:{env('API_PASSWORD')}"
encodedCredentials = str(b64encode(credentials.encode("utf-8")), "utf-8")
auth = f'"Authorization": "Basic {encodedCredentials}"'

def get_api_data():
    return requests.get(endpoint).json()
Run Code Online (Sandbox Code Playgroud)

我应该如何传递标题?

python django basic-authentication

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

Rails 6 Asset Pipeline:如何在 application.js 中导入供应商脚本?

我正在尝试在 application.js 下正确导入供应商 js 文件app/javascript/packs/application.js

这是当前的架构:

javascript 文件夹架构

可以看到,我选择将供应商 js 文件放入app/javascrip/plugins/

我的结构application.js如下:

// Rails Internals
require("@rails/ujs").start();
require("turbolinks").start();
require("@rails/activestorage").start();
require("channels");

// Libraries/Vendor-plugins
require("jquery");
import 'bootstrap';
require('../plugins/chosen.min.js');
require('../plugins/magnific-popup.min.js');
require('../plugins/owl.carousel.min.js');
require('../plugins/rangeSlider');
require('../plugins/sticky-kit.min.js');
require('../plugins/masonry.min.js');
require('../plugins/mmenu.min.js');
require('../plugins/tooltips.min.js');
require('../plugins/custom');


// Custom functions
// import { myFunction } from '../components/myScrip';

document.addEventListener('turbolinks:load', () => {
});

Run Code Online (Sandbox Code Playgroud)

custom.js通过这样做,位于 中的文件应该可以访问 jQuery app/javascript/plugins/custom.js,对吧?

为了清楚起见, 的custom.js形状如下:

(function ($) {
    "use strict";
    $(document).ready(function () {
      // ...
    }
})(this.jQuery);
Run Code Online (Sandbox Code Playgroud)

但是当我运行服务器时,找不到 jQuery:

jquery 错误

yarn add jquery@3.5.1 bootstrap@3.4.1我通过(供应商需要的旧版本)添加了 jQuery …

jquery asset-pipeline webpack ruby-on-rails-6

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