Hướng dẫn cài đặt 2 csrf khác nhau của gofiber
Tác giả: Bùi Minh Vương
Hướng dẫn sử dụng dotmoney
Khi bạn đăng kí sử dụng với Dotmoney bạn sẽ được cung cấp các giá trị: secretKey, accessKey, product_id Các giá trị ban đầu: $secretKey được sử dụng trong hàm createHash() $accessKey $product_id $accessDate là thời gian hiện tại theo định dạng timestamp (ex: 1671088940) $userId là user id của người dùng $requestMethod = ‘GET’ hoặc ‘POST’ $host = ‘https://api.sb.d-money.jp’;…
Trình xác thực Auth0
Auth0 là một công cụ dịch vụ xác thực giúp việc triển khai các tính năng liên quan đến xác thực trong website của bạn trở nên dễ dàng. Một số tính năng của Auth0: Xác thực một lần (single sign-on) Xác thực 2 yếu tố (multifactor authentication) Đăng nhập không cần mật khẩu Quản lý người dùng Tích hợp…
Hướng dẫn cài đặt và sử dụng scss
Cài đặt: Cài Node.js Chạy lệnh npm install -g sass Các ưu điểm của SCSS: SCSS dễ dàng làm quen và sử dụng(hỗ trợ 100% cú pháp của CSS và thêm 1 số khái niệm mới). Tiết kiệm thời gian viết CSS. Dễ dàng bảo trì và phát triển. Có tính linh hoạt và tái sử dụng cao. Các tập tin,…
Cách build Chrome extension
1. Tạo tệp kê khai(manifest.json) – Đây là file chứa các thông tin cơ bản của Extension bao gồm: name: Tên của extension description: Mô tả ngắn gọn cho extension version: Phiên bản của extension. Mỗi khi có cập nhật cho extension, bạn nhất định phải thay đổi giá trị này thì extension của bạn mới có thể tự động…
Phân biệt Union, Intersection and Difference trong phương thức trả về QuerySet
Bảng MyModel= { 1: ‘A’, 2: ‘B’, 3: ‘C’, 4: ‘D’, 1: ‘E’} Thực hiện truy vấn lấy dữ liệu: q1 = MyModel.objects.all() -> <QuerySet [<MyModel: A>, <MyModel: B>, <MyModel: C>, <MyModel: D>, <MyModel: E>]> q2 = MyModel.objects.filter(name__in=(‘A’,’B’)) -> <QuerySet [<MyModel: A>, <MyModel: B>]> q3 = MyModel.objects.filter(name__in=(‘C’,’D’)) -> <QuerySet [<MyModel: C>, <MyModel: D>]> – Union() sẽ trả kết hợp các kết quả trong…
Kiểm tra quyền trong ModelAdmin
Trong Django có các hàm kiểm tra: – ModelAdmin.has_view_permission(request, obj=None) Trả về True nếu đối tượng (obj) được phép xem, ngược lại trả về False. – ModelAdmin.has_add_permission(request, obj=None) Trả về True nếu được phép thêm đối tượng (obj), ngược lại trả về False. – ModelAdmin.has_change_permission(request, obj=None) Trả về True nếu được phép chỉnh sửa đối tượng (obj), ngược lại trả về False. – ModelAdmin.has_delete_permission(request, obj=None) Trả về…
Xử lí khi có sự khác biệt các fields trong Form Admin
Trường hợp Bảng ae_fonttype có các trường(id, name, order, font_type) Khi hiển thị(view) cần có các trường (name, font_type, font_list) font_list: là danh sách các font có cùng font_type được lưu ở ae_fonttype_font_list Khi thêm bản ghi mới(add) chỉ có(name, font_type) Model(models/font_type.py): class FontType(models.Model): class Meta: verbose_name = ‘フォントタイプ’ verbose_name_plural = ‘b.1 フォントタイプ一覧’ ordering = [‘order’] name = models.CharField(verbose_name=”名前”, null=True, blank=True, max_length=32)…
Download và zip nhiều file cùng lúc
Để thực hiện tính năng này, cần sử dụng thêm 2 thư viện: jszip & FileSaver https://github.com/Stuk/jszip https://github.com/eligrey/FileSaver.js Sử dụng: var zip = new JSZip(); zip.file(“Hello.txt”, “Hello Worldn”); var img = zip.folder(“images”); img.file(“smile.gif”, imgData, {base64: true}); zip.generateAsync({type:”blob”}).then(function(content) { // see FileSaver.js saveAs(content, “example.zip”); }); Để có thể dùng tính năng tải xuống trực tuyến sử dụng tùy chọn streamFiles zip.generateAsync({ type:…
Vô hiệu hóa Chrome tự động điền input password
Việc điền tự động của chrome có thể gây ảnh hưởng tới 1 input khác(tự động điền giá trị) khi có 1 input type=”password” Thay thành autocomplete=”new-password” trong trường hợp autocomplete=”off” và autocomplete=”false” không sử dụng được trong input type=”password”