Hướng dẫn url build python
Bạn có thể download file (File ảnh, File text, …) từ 1 đường dẫn trên web sử dụng thư viện urllib của Python 3. Đoạn source code Python 3 như sau: import urllib import os output_dir = '/tmp' image_url = 'https://vinasupport.com/assets/img/vinasupport_logo.png' # Make output directory if not exist if not os.path.exists(output_dir): os.makedirs(output_dir) # save path image_save_path = output_dir + '/' + os.path.basename(image_url) # Download file from url urllib.request.urlretrieve(image, image_save_path) print(image_save_path) Trong ví dụ trên, mình thực hiện download file ảnh có đường dẫn là: https://vinasupport.com/assets/img/vinasupport_logo.png Và lưu nó xuống dường dẫn trên server /tmp/vinasupport_logo.png Một cách khác là sử dụng thư viện requests Đầu tiên cài đặt requests thông qua trình quản lý module / packages của Python 3 pip install requests Sử dụng requests để download file: from requests import get # to make GET request def download(url, file_name): # open in binary mode with open(file_name, "wb") as file: # get request response = get(url) # write to file file.write(response.content) Nguồn: vinasupport.com Chúng ta là các lập trình viên, và chúng ta luôn được khuyên là: "Cách nhanh và hiệu quả nhất trong việc học lập trình và bắt tay vào giải quyết các bài toán thực tế". Kinh nghiệm và kiến thức sẽ đến trong quá trình chúng ta giải quyết các bài toán này. Các "bài toán mẫu" hay pet projects/ litte side projects đến từ đâu? Nhiều khi đến từ những ý tưởng nhỏ trong đời sống hoặc đơn giản hơn, chúng ta thực hiện clone lại các ứng dụng đã có để xem các lập trình viên đi trước đã dừng những technique nào để giải quyết nó. Hôm nay, tôi sẽ cùng các bạn thực hiện xây dựng nhanh một ứng dụng rút gọn link bằng python-django, giống như bitly.com chẳng hạn. Phân tích bài toán.Bài toán này nếu viết theo dạng user-story thì không có gì phức tạp, nó sẽ là các dòng yêu cầu như sau: Tôi là Mr.Bee, tôi là đại diện marketing của công ty X, tôi thường xuyên phải gửi link đến các trang web của công ty cho khách hàng của chúng ta, đường link của chúng ta khá dài, khách hàng khó nhớ. Bản thân tôi đôi lúc cũng cần phải nhớ các đường link để ghi ra giấy sticky-note cho khách hàng. Nếu sử dụng link thu gọn từ một dịch vụ bên ngoài thì không mang lại tin tưởng của khách hàng. Tôi muốn có một hệ thống rút gọn link có domain của công ty, cho phép tôi thu gọn url thành một chuỗi ngắn, có thể cho phép cá nhân hóa thành tên-số-điện-thoại khách hàng.
Về mặt kỹ thuật, yêu cầu này có thể giải quyết rất đơn giản bằng cách xây dựng một ứng dụng chỉ với một bảng dữ liệu gồm các trường dữ liệu sau: alias: kiểu chuỗi, là phần rút gọn sẽ hiển thị cho user Khi người dùng thực hiện truy nhập vào link rút gọn, hệ thống sẽ tìm kiếm trong cơ sở dữ liệu và trả về link gốc kèm theo status_code 301 REDIRECT Tất tần tật về Django1. Django là gì?Django là một python-web-framework mã nghuồn mở và miễn phí, cho phép xây dựng nhanh các ứng dụng web dựa trên các khung kiến trúc đã được tối ưu. Django được xây dựng bởi đội ngũ các lập trình viên có nhiều kinh nghiệm đến từ Django Software Foundation(DSF) - một tổ chức phi lợi nhuận. Phần lõi của Django đã thực hiện xử lý những thứ phức tạp của hệ thống phát triển web bằng cách cung cấp các module sẵn có như ORM, Template, Routing,... Các lập trình viên sử dụng django chỉ cần tập trung vào việc phát triển các ứng dụng của mình sao cho nó chạy đúng với yêu cầu của người dùng. Các tài liệu, mô tả về ưu điểm của django, các bạn có thể tìm hiểu thêm từ trang chủ của framework: https://www.djangoproject.com/ Django đã trải qua các lần LTS với nhiều thay đổi như 1.11, 2.2, ... Version hiện tại (tháng 12/2020), của Django là 3.1.x. Với mỗi version đều có các tài liệu, tutorial cho phép các lập trình viên có thể nhanh chóng tìm hiểu và xây dựng cho mình một ứng dụng dạng "blog" đơn giản. Nếu bạn là một người mới bắt đầu tìm hiểu về Django, hãy bắt đầu từ tài liệu tutorial miễn phí trên trang web của họ: https://docs.djangoproject.com/en/3.1/intro/tutorial01/. Hoặc bạn có thể bắt đầu bằng bài viết dưới đây của tôi :) Mặc dù nó sẽ không thể chi tiết được như trên tutorial. 2. Cài đặt DjangoĐể bắt đầu cài đặt Django, chúng ta sẽ thực hiện việc cài đặt một virtual environment (tham khảo từ bài viết: Làm Chủ Python Virtual Environment - Môi Trường Lập Trình Ảo ? ) Thực hiện install Django thông qua trình quản lý package pip:
Việc cài đặt có thể kéo dài trong một vài phút, tùy thuộc vào đường truyền mạng của chúng ta. Sau khi thực hiện cài đặt xong, chúng ta kiểm tra lại xem việc cài đặt đã thành công chưa bằng câu lệnh:
3. Khởi tạo website với djangoBây giờ chúng ta sẽ bắt đầu thực hiện cài đặt website cho mình. Để tạo ra một project, chúng ta dùng command:
Chúng ta sẽ có một thư mục
Folder
Thư mục
Đến đây là chúng ta đã khởi tạo một website đang chạy trên localhost và cổng 8000. Để thực hiện tắt ứng dụng, chúng ta thực hiện gõ CTRL - BREAK trên màn hình đen terminal.
4. Khởi tạo app.Trong Django thì mỗi cụm chức năng sẽ được thiết kế như một python-package. Các tạo ra một django-app như sau:
Chúng ta thu được cấu trúc thư mục mới với thêm thư mục url_shortener:
Bên trong thư mục url_shortener, chúng ta có các file và dự kiến các chức năng của nó sẽ như sau: Chúng ta sẽ viết một view đơn giản để hiển thị ra câu chào mừng. Cách thực hiện sẽ như sau: Cụ thể các bước sẽ làm như sau:
Đây là một view (khung nhìn) đơn giản của Django, muốn view có thể hiển thị được ra bên ngoài, chúng ta cần gán nó vào một URL. Việc gán này cần một config trong file urls.py. Để đơn giản, Django cho phép chúng ta tách riêng các URL với từng django-app, sau đó mới thực hiện map lại ở urls.py ở thư mục chính. Bước 2: Tạo
file url_shortener/urls.py
Ở đây, ta thấy urlpattern trỏ vào views.index và có alias là 'index' (để dễ dành quản lý) Bước 3: Mở file my_url/urls.py, thực hiện kết nối dữ liệu đã khai báo từ url_shortener/urls.py vào my_url/urls.py
Ở đây, chúng ta đã thêm vào function là include('url_shortener.urls'), function này cho phép thực hiện liên kết các url đến các file cấu hình url trong các django-app. Thực hiện khởi chạy ứng dụng và truy nhập vào đường dẫn http://127.0.0.1:8000/url-shortener/, chúng ta sẽ thu được kết quả hiển thị ra màn hình: 5. Cài đặt database cho ứng dụng.Mặc định thì Django sẽ cung cấp cho người dùng 1 database sử dụng sqlite3, đây là một dạng database file, với file dữ liệu được mặc định đặt tại thư mục gốc. Để bắt đầu sử dụng database trong project của chúng ta, chúng ta sẽ thực hiện việc migrate dữ liệu các application mặc định vào database:
Câu lệnh migrate sẽ thực hiện cài đặt các bảng dữ liệu cần thiết cho các module/app được đặt tại
INSTALLED_APPS trong file my_url/settings.py.
Tương ứng với nó là các bảng dữ liệu sẽ được cài đặt vào database sau câu lệnh migrate: 6. Thiết kế models & thực hiện migrate dữ liệu.Có nhiều phương án thiết kế cơ sở dữ liệu và gán nó vào source code như: code first, database
first,... Phần models của Django được thiết kế theo DRY Principle (Don't repeat yourself - https://docs.djangoproject.com/en/3.1/misc/design-philosophies/#dry) nên source code của model-class sẽ đặt tập trung tại mỗi django-app nhưng cho phép truy cập từ các django-app khác nhau. Mở file url_shortener/models.py, thực hiện định nghĩa một class như bên dưới
Ở đây, chúng ta sẽ tiếp xúc với các từ khóa mới: Để thực hiện activating các models mới được định nghĩa, chúng ta cần thực hiện khai báo ứng dụng vào đối tượng INSTALLED_APPS trong file my_url/settings.py
Thực hiện tạo file cho phép migration app mới cài đặt bằng câu lệnh:
Sau câu lệnh này, chúng ta thấy trong thư mục url_shortener\migrations xuất hiện một file có tên 0001_initial.py, có nội dung:
Đây chính là nội dung để chúng
ta thực hiện migration vào database cho ứng dụng url_shortener. Cách thực hiện là dùng câu lệnh:
Câu lệnh trên sẽ nạp dữ liệu bảng trên vào cache của django-admin, để thực sự có bảng dữ liệu, chúng ta cần thực hiện migrate dữ liệu một lần nữa.
Mở database db.sqlite3, chúng ta sẽ thấy có thêm một bảng dữ liệu có tên url_shortener_myurl. 7. Django-adminĐây là một trong số những tính năng làm nên thương hiệu "rapidly-application" của Django.
Chỉ cần có models, có bảng dữ liệu là có thể xây dựng xong giao diện admin gồm các chức năng CRUD đơn giản. python manage.py createsuperuser Sau đó, thực hiện nhập thông tin cơ bản như username, email, password. Đây là thông tin superuser nên cần phải ... tự nhớ.
Đến đây, khi thực hiện start ứng dụng, thực hiện truy nhập vào trang web http://127.0.0.1:8000/admin/, chúng ta sẽ được yêu cầu thực hiện đăng nhập. Lúc
này, sẽ thực hiện đăng nhập bằng tài khoản superuser đã tạo phía trên.
Thực hiện restart lại ứng dụng hoặc refresh lại admin site (trường hợp đặt DEBUG=True) Nhấn vào "My url", chuyển sang trang quản lý dữ liệu của app. Từ đây, chúng ta có thể thực hiện việc Thêm/sửa/xóa các bản ghi. Nhấn vào một link chi tiết, chúng ta thu được: 8. Hiển thị danh sách dữ liệu dưới góc nhìn của một normal userGiả sử chúng ta sẽ thực hiện liệt kê tất cả các dữ liệu alias/url đang có trong database ra một danh sách. Sau đó
user có thể lựa chọn mở thử link theo alias xem có thực hiện redirect sang đúng link ở url hay không.
Thực hiện thêm function dưới đây để trả về danh sách các url và alias tương ứng.
Trong đó câu lệnh `urls = MyURL.objects ` có nghĩa là lấy tất cả bản ghi của bảng MyURL
Thực hiện khởi tạo server và truy cập vào link: http://127.0.0.1:8000/url-shortener/list, chúng ta sẽ thu được kết quả: 9. Xử lý khi người dùng mở một link có chứa alias.Từ danh sách hiển thị phía trên, nếu người dùng nhấn vào 1 link bất kỳ ví dụ: http://127.0.0.1:8000/url-shortener/detail/profile/, nhiệm vụ của chúng ta là phải viết code để thực hiện lấy ra giá trị là link kết nối: https://codelearn.io/sharing/how-to-profiling-python-application Mở file url_shortener/views.py, bổ sung thêm đoạn code thực hiện lấy ra dữ liệu từng bản ghi theo alias
Mở url_shortener/urls.py để bổ sung thêm routing: Đến đây ta quay lại trang list lúc nãy và thực hiện ấn vào các link shorten đã có sẵn, kết quả sẽ dẫn chúng ta đến trạng url gốc. Kết.Trên đây là một ví dụ nhỏ về việc tạo nhanh một ứng dụng web với python-django. Dự kiến tôi sẽ viết thành 1 series bài viết liên quan đến Django, các phần sau của bài viết này sẽ có trong những tuần tiếp theo. Cảm ơn các bạn đã đọc bài viết của tôi. Link tham khảo: https://docs.djangoproject.com/en/3.1/intro/tutorial01/ |