Podcast – Linh Fish Dev

Podcast – Linh Fish Dev

By Linh Fish DevTechnology
Download on the App Store

Podcast – Linh Fish Dev episodes

  • Linh Fish Dev Podcast #33: Django: dùng auto_now và auto_now_add đúng cách — khi nào nên thay bằng default=timezone.now

    Tập 33: dùng đúng auto_now và auto_now_add trong Django, và khi nào nên thay bằng default với hàm now của module timezone. Bạn sẽ nghe vì sao ngày đăng gốc cứ bị ghi đè khi import dữ liệu cũ: auto_now_add chỉ chạy lúc thêm mới nên mọi giá trị truyền vào đều bị thay bằng thời điểm hiện tại. Cập nhật hàng loạt bằng một câu lệnh update cũng không đổi updated_at, vì câu lệnh chạy thẳng xuống cơ sở dữ liệu mà không gọi hàm save, và hai trường này còn bị ẩn khỏi form. Giải pháp là dùng default với hàm now: vừa tự điền khi tạo mới, vừa giữ được ngày cũ khi import, vừa chỉnh được trong admin và ModelForm. Audio tiếng Việt trong tập này là bản chính thức, phát trên mọi nền tảng podcast; bản tiếng Anh ở player phụ bên dưới, video đầy đủ trên kênh YouTube Linh Fish Dev.

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: Django: dùng auto_now và auto_now_add đúng cách — khi nào nên thay bằng default=timezone.now

    Linh Fish Dev Podcast #33: Django: dùng auto_now và auto_now_add đúng cách — khi nào nên thay bằng default=timezone.now

    Hà Văn Linh
    Tháng 11 14, 2026
    3:48

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min
  • Linh Fish Dev Podcast #32: FastAPI: nhận nhiều tham số body bằng Body() — khi nào cần embed=True trong 5 phút

    Tập 32: nhận nhiều tham số body trong FastAPI bằng hàm Body, và khi nào cần thêm embed bằng True. Bạn sẽ nghe vì sao client gửi đúng dữ liệu mà server vẫn trả lỗi 422: với một tham số body duy nhất, FastAPI chờ giá trị JSON trần chứ không phải object có key, và chỉ cần thêm embed bằng True là client gửi object như bình thường. Từ hai tham số trở lên, FastAPI tự dùng tên tham số làm key, mỗi trường vẫn validate riêng như Query hay Path, sai ràng buộc nào cũng trả 422 ngay từ cổng API. Audio tiếng Việt trong tập này là bản chính thức, phát trên mọi nền tảng podcast; bản tiếng Anh ở player phụ bên dưới, video đầy đủ trên kênh YouTube Linh Fish Dev.

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: FastAPI: nhận nhiều tham số body bằng Body() — khi nào cần embed=True trong 5 phút

    Linh Fish Dev Podcast #32: FastAPI: nhận nhiều tham số body bằng Body() — khi nào cần embed=True trong 5 phút

    Hà Văn Linh
    Tháng 11 13, 2026
    3:19

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min
  • Linh Fish Dev Podcast #31: FastAPI nhận file upload bằng UploadFile — chặn file quá lớn và sai định dạng trước khi lưu trong 5 phút

    Tập 31: FastAPI nhận file upload bằng UploadFile trong 5 phút — chặn file quá lớn và sai định dạng trước khi lưu. Đọc toàn bộ file vào RAM bằng await file.read() rồi ghi thẳng xuống đĩa bằng tên file do client gửi vừa tốn bộ nhớ, vừa nhận mọi loại file, lại có nguy cơ bị ghi đè ra ngoài thư mục upload. Tập này hướng dẫn kiểm tra content_type trước, đọc file theo từng chunk 1 MB để đếm dung lượng và trả lỗi 413 khi vượt 5 MB, rồi lưu bằng tên do server tự sinh với uuid — cùng lưu ý bắt buộc cài python-multipart khi dùng File().

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: FastAPI: nhận file upload bằng UploadFile — chặn file quá lớn và sai định dạng trước khi lưu trong 5 phút

    Linh Fish Dev Podcast #31: FastAPI nhận file upload bằng UploadFile — chặn file quá lớn và sai định dạng trước khi lưu trong 5 phút

    Hà Văn Linh
    Tháng 11 12, 2026
    3:23

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min
  • Linh Fish Dev Podcast #30: Django bảo vệ view chỉ cho người đăng nhập bằng @login_required và LoginRequiredMixin trong 5 phút

    Tập 30: Django bảo vệ view chỉ cho người đăng nhập bằng @login_required và LoginRequiredMixin trong 5 phút. Viết tay kiểm tra request.user.is_authenticated ở đầu mỗi view vừa lặp lại vừa dễ sót, chỉ cần quên một chỗ là dữ liệu riêng tư bị lộ, và tự viết redirect mà quên giữ địa chỉ đích thì người dùng đăng nhập xong lại rơi về trang chủ. Tập này hướng dẫn decorator @login_required cho function view và LoginRequiredMixin cho class-based view — một dòng là xong, người chưa đăng nhập được chuyển về trang login kèm tham số next để quay lại đúng trang ban đầu. Ngoài ra còn có cách cài LOGIN_URL và LOGIN_REDIRECT_URL, lưu ý không gắn decorator cho trang đăng nhập hay đăng ký, và cách kết hợp với phân quyền theo vai trò.

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: Django: bảo vệ view chỉ cho người đăng nhập bằng @login_required và LoginRequiredMixin trong 5 phút

    Linh Fish Dev Podcast #30: Django bảo vệ view chỉ cho người đăng nhập bằng @login_required và LoginRequiredMixin trong 5 phút

    Hà Văn Linh
    Tháng 11 11, 2026
    3:25

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    0 min
  • Linh Fish Dev Podcast #29: Python viết CLI chuyên nghiệp bằng argparse — khỏi parse sys.argv thủ công trong 5 phút

    Tập 29: Python viết CLI chuyên nghiệp bằng argparse trong 5 phút. Đọc sys.argv thủ công rồi tự kiểm tra từng vị trí rất giòn: quên tham số thì dính IndexError, nhập sai kiểu thì văng ValueError, người dùng mới không biết script nhận tham số gì. Tập này hướng dẫn argparse — khai báo tham số một lần bằng add_argument, tự có –help, tự kiểm tra kiểu dữ liệu, báo lỗi rõ ràng và thoát mã 2 khi sai. Ngoài ra còn có subparsers để tách nhiều lệnh con như import và export, và cách bắt buộc một option bằng required=True.

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: Python: viết CLI chuyên nghiệp bằng argparse — khỏi parse sys.argv thủ công trong 5 phút

    Linh Fish Dev Podcast #29: Python viết CLI chuyên nghiệp bằng argparse — khỏi parse sys.argv thủ công trong 5 phút

    Hà Văn Linh
    Tháng 11 10, 2026
    3:51

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min
  • Linh Fish Dev Podcast #28: Flask hash mật khẩu an toàn bằng Werkzeug trong 5 phút

    Tập 28: Flask hash mật khẩu an toàn bằng Werkzeug trong 5 phút. Lưu mật khẩu dạng plaintext, hay hash bằng SHA-256 không có salt, đều là những lỗi bảo mật nghiêm trọng mà nhiều tutorial Flask cho người mới vẫn mắc phải. Tập này hướng dẫn hai hàm có sẵn của Werkzeug — generate_password_hash để hash khi đăng ký, check_password_hash để verify khi đăng nhập — với thuật toán scrypt, salt ngẫu nhiên và khả năng chống timing attack. Ngoài ra còn có cách đổi thuật toán mà không làm hỏng hash cũ, và cách xử lý đúng với user cũ đang lưu plaintext hoặc SHA-256.

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: Flask: hash mật khẩu an toàn bằng Werkzeug — đừng lưu plaintext trong 5 phút

    Linh Fish Dev Podcast #28: Flask hash mật khẩu an toàn bằng Werkzeug trong 5 phút

    Hà Văn Linh
    Tháng 11 9, 2026
    3:14

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min
  • Linh Fish Dev Podcast #27: Django REST Framework: xác thực API bằng TokenAuthentication trong 5 phút

    Tập 27: Django REST Framework xác thực API bằng TokenAuthentication trong 5 phút. API của bạn đang mở toang nếu bất kỳ ai biết URL cũng đọc được dữ liệu — TokenAuthentication cấp cho mỗi user một token duy nhất, client gửi kèm token trong header Authorization ở mỗi request, và DRF tự xác thực user trước khi view chạy. Tập này đi qua 3 bước: thêm rest_framework.authtoken rồi chạy migrate, khai báo lớp xác thực mặc định và yêu cầu đăng nhập cho toàn bộ API, mở endpoint lấy token bằng view có sẵn obtain_auth_token. Ngoài ra còn có cách tự tạo token ngay khi user đăng ký bằng signal post_save, và hai giới hạn cần nhớ: token mặc định không hết hạn nên phải đi qua HTTPS, và mỗi user chỉ có đúng một token.

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: Django REST Framework: xác thực API bằng TokenAuthentication trong 5 phút

    Linh Fish Dev Podcast #27: Django REST Framework: xác thực API bằng TokenAuthentication trong 5 phút

    Hà Văn Linh
    Tháng 11 8, 2026
    2:52

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    0 min
  • Linh Fish Dev Podcast #26: FastAPI: nhận dữ liệu form bằng Form() — endpoint login chuẩn OAuth2 trong 5 phút

    Tập 26: FastAPI nhận dữ liệu form bằng Form() — endpoint login chuẩn OAuth2 trong 5 phút. Tài khoản đúng, mật khẩu đúng mà server vẫn trả lỗi 422: nguyên nhân là client gửi dữ liệu dạng form trong khi endpoint của bạn lại đang chờ JSON. Tập này giải thích vì sao FastAPI mặc định hiểu Pydantic model là JSON body, cách dùng Form() cho từng trường với validate min_length, và khi nào dùng OAuth2PasswordRequestForm cho endpoint /token chuẩn OAuth2 để tương thích ngay với nút Authorize trên Swagger UI. Nhớ cài python-multipart trước khi dùng Form(), và quy tắc nhanh: client gửi JSON thì dùng Pydantic model, client gửi form thì dùng Form().

    Đọc bài viết đầy đủ kèm code mẫu đã kiểm chứng chạy được tại: FastAPI: nhận dữ liệu form bằng Form() — endpoint login chuẩn OAuth2 trong 5 phút

    Linh Fish Dev Podcast #26: FastAPI: nhận dữ liệu form bằng Form() — endpoint login chuẩn OAuth2 trong 5 phút

    Hà Văn Linh
    Tháng 11 7, 2026
    3:35

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min
  • Linh Fish Dev Podcast #25: FastAPI: validate query string bằng Query() — chặn tham số sai ngay từ cổng API trong 5 phút

    Query string là nơi client gửi tham số lọc, phân trang và tìm kiếm, và cũng là nơi tham số sai lọt qua dễ nhất: skip âm, limit khổng lồ hay từ khóa chỉ có một ký tự đều được FastAPI chấp nhận nếu chỉ khai báo tham số trần. Trong tập này, Linh Fish Dev Podcast #25 giải thích vì sao FastAPI chỉ kiểm tra kiểu mà không kiểm tra giá trị, và cách khóa chặt query string bằng Query() với ge/le, min_length/max_length, pattern và list[str] để tham số sai trả lỗi 422 ngay từ cổng API. Nghe xong, bạn sẽ có ba chỗ cần kiểm tra ngay trong endpoint danh sách hay tìm kiếm của mình, và biết khi nào dùng Query(), khi nào dùng Path() hay Field().

    Đọc bài đầy đủ: FastAPI: validate query string bằng Query() — chặn tham số sai ngay từ cổng API trong 5 phút

    Linh Fish Dev Podcast #25: FastAPI: validate query string bằng Query() — chặn tham số sai ngay từ cổng API trong 5 phút

    Hà Văn Linh
    Tháng 11 6, 2026

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    0 min
  • Linh Fish Dev Podcast #24: Django: loại bỏ bản ghi trùng bằng distinct() khi lọc qua quan hệ ManyToMany trong 5 phút

    Lọc queryset qua quan hệ nhiều tới nhiều có thể trả về cùng một bản ghi nhiều lần: một cuốn sách khớp hai tác giả thì xuất hiện hai dòng, khiến count() báo sai, phân trang lệch và thống kê sai mà không có lỗi nào cảnh báo. Trong tập này, Linh Fish Dev Podcast #24 giải thích vì sao Django JOIN bảng trung gian sinh ra dòng trùng, và cách sửa gọn nhất là thêm .distinct() vào cuối queryset để cơ sở dữ liệu loại bỏ dòng trùng ngay trong câu lệnh SQL. Nghe xong, bạn sẽ có quy tắc áp dụng ngay cho mọi queryset lọc qua tags, categories hay authors — và biết khi nào distinct() không cứu được, như với DISTINCT ON chỉ có trên PostgreSQL hay khi đã dùng annotate().

    Đọc bài đầy đủ: Django: loại bỏ bản ghi trùng bằng distinct() khi lọc qua quan hệ ManyToMany trong 5 phút

    Linh Fish Dev Podcast #24: Django: loại bỏ bản ghi trùng bằng distinct() khi lọc qua quan hệ ManyToMany trong 5 phút

    Hà Văn Linh
    Tháng 11 5, 2026

    Listen to the episode
    English version

    Nghe Linh Fish Dev Podcast trên:

    Spotify
    Apple Podcasts
    Amazon Music
    YouTube
    Castbox
    Pocket Casts
    TrueFans
    Pod.link
    4 min

About Podcast – Linh Fish Dev

From the publisher's feed

Tin tức & kiến thức Python, Django mỗi ngày