Bạn đã viết một kịch bản Python mà bạn tự hào và bây giờ bạn muốn khoe nó với cả thế giới. Nhưng bằng cách nào? . Chuyển đổi tập lệnh của bạn thành ứng dụng web Python là một giải pháp tuyệt vời để làm cho mã của bạn có thể sử dụng được cho nhiều đối tượng
Trong hướng dẫn này, bạn sẽ học cách chuyển từ tập lệnh Python cục bộ sang ứng dụng web Flask được triển khai đầy đủ mà bạn có thể chia sẻ với mọi người
Đến cuối hướng dẫn này, bạn sẽ biết
- Ứng dụng web là gì và bạn có thể lưu trữ chúng trực tuyến như thế nào
- Cách chuyển đổi tập lệnh Python thành ứng dụng web Flask
- Cách cải thiện trải nghiệm người dùng bằng cách thêm HTML vào mã Python của bạn
- Cách triển khai ứng dụng web Python của bạn lên Google App Engine
Ngoài việc xem qua một dự án ví dụ, bạn sẽ tìm thấy một số bài tập trong suốt hướng dẫn. Họ sẽ cho bạn cơ hội để củng cố những gì bạn đang học thông qua thực hành thêm. Bạn cũng có thể tải xuống mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng web của mình bằng cách nhấp vào liên kết bên dưới
Nhận mã mẫu. Nhấp vào đây để lấy mã mẫu mà bạn sẽ sử dụng để tìm hiểu về cách tạo ứng dụng web Python bằng Flask trong hướng dẫn này
Chải lên những điều cơ bản
Trong phần này, bạn sẽ có được nền tảng lý thuyết trong các chủ đề khác nhau mà bạn sẽ làm việc trong phần thực hành của hướng dẫn này
- Những loại phân phối mã Python tồn tại
- Tại sao xây dựng một ứng dụng web có thể là một lựa chọn tốt
- ứng dụng web là gì
- Cách nội dung được phân phối qua Internet
- Lưu trữ web có nghĩa là gì
- Nhà cung cấp dịch vụ lưu trữ nào tồn tại và nhà cung cấp dịch vụ nào sẽ sử dụng
Tìm hiểu về các chủ đề này có thể giúp bạn cảm thấy tự tin hơn khi viết mã Python cho Web. Tuy nhiên, nếu bạn đã quen thuộc với chúng, thì cứ thoải mái bỏ qua, và bắt đầu xây dựng ứng dụng web Python của bạn
Loại bỏ các quảng cáoPhân phối mã Python của bạn
Đưa mã của bạn đến người dùng của bạn được gọi là phân phối. Theo truyền thống, có ba cách tiếp cận khác nhau mà bạn có thể sử dụng để phân phối mã của mình để những người khác có thể làm việc với chương trình của bạn
- thư viện Python
- chương trình độc lập
- ứng dụng web Python
Bạn sẽ xem xét kỹ hơn từng phương pháp dưới đây
Thư viện Python
Nếu bạn đã làm việc với hệ sinh thái gói mở rộng của Python, thì có khả năng bạn đã cài đặt các gói Python với
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
6. Là một lập trình viên, bạn có thể muốn xuất bản gói Python của mình trên PyPI để cho phép những người dùng khác truy cập và sử dụng mã của bạn bằng cách cài đặt mã bằng cách sử dụng 1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
6$ python3 -m pip install
After you’ve successfully published your code to PyPI, this command will install your package, including its dependencies, on any of your users’ computers, provided that they have an Internet connection
If you don’t want to publish your code as a PyPI package, then you can still use Python’s built-in
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
8 command to create a source distribution or a Python wheel to create a to share with your usersDistributing your code like this keeps it close to the original script you wrote and adds only what’s necessary for others to run it. However, using this approach also means that your users will need to run your code with Python. Many people who want to use your script’s functionality won’t have Python installed or won’t be familiar with the processes required to work directly with your code
A more user-friendly way to present your code to potential users is to build a standalone program
Standalone Program
Computer programs come in different shapes and forms, and there are multiple options for transforming your Python scripts into standalone programs. Below you’ll read about two possibilities
- Packaging your code
- Building a GUI
Programs such as PyInstaller, py2app, py2exe, or Briefcase can help with packaging your code. They turn Python scripts into executable programs that can be used on different platforms without requiring your users to explicitly run the Python interpreter
Note. To learn more about packaging your code, check out Using PyInstaller to Easily Distribute Python Applications or listen to the Real Python Podcast episode Options for Packaging Your Python Application
While packaging your code can resolve dependency problems, your code still just runs on the command line. Most people are used to working with programs that provide a graphical user interface [GUI]. You can make your Python code accessible to more people by building a GUI for it
Note. There are different packages that can help you with building a GUI, including Tkinter, wxPython, and PySimpleGUI. If you want to build a native desktop-based app, then check out the learning path for Python GUI Programming
While a standalone GUI desktop program can make your code accessible to a wider audience, it still presents a hurdle for people to get started. Before running your program, potential users have a few steps to get through. They need to find the right version for their operating system, download it, and successfully install it. Some may give up before they make it all the way
It makes sense that many developers instead build web applications that can be accessed quickly and run on an Internet browser
Python Web Application
The advantage of web applications is that they’re platform independent and can be run by anyone who has access to the Internet. Their code is implemented on a back-end server, where the program processes incoming requests and responds through a shared protocol that’s understood by all browsers
Python powers many large web applications and is a common choice as a back-end language. Many Python-driven web applications are planned from the start as web applications and are built using Python web frameworks such as Flask, which you’ll use in this tutorial
However, instead of the web-first approach described above, you’re going to take a different angle. After all, you weren’t planning to build a web application. You just created a useful Python script, and now you want to share with the world. To make it accessible to a broad range of users, you’ll refactor it into a web application and then deploy it to the Internet
It’s time to go over what a web application is and how it’s different from other content on the Web
Loại bỏ các quảng cáoTìm hiểu về các ứng dụng web Python
Historically, websites had fixed content that was the same for every user who accessed that page. These web pages are called static because their content doesn’t change when you interact with them. When serving a static web page, a web server responds to your request by sending back the content of that page, regardless of who you are or what other actions you took
You can browse an example of a static website at the first URL that ever went online, as well as the pages it links to
Such static websites aren’t considered applications since their content isn’t generated dynamically by code. While static sites used to make up all of the Internet, most websites today are true web applications, which offer dynamic web pages that can change the content they deliver
For instance, a webmail application allows you to interact with it in many ways. Depending on your actions, it can display different types of information, often while staying in a single page
Python-driven web applications use Python code to determine what actions to take and what content to show. Your code is run by the web server that hosts your website, which means that your users don’t need to install anything. All they need to interact with your code is a browser and an Internet connection
Getting Python to run on a website can be complicated, but there are a number of different web frameworks that automatically take care of the details. As mentioned above, you’ll build a basic Flask application in this tutorial
In the upcoming section, you’ll get a high-level perspective on the main processes that need to happen to run your Python code on a server and deliver a response to your users
Review the HTTP Request-Response Cycle
Serving dynamic content over the Internet involves a lot of different pieces, and they all have to communicate with one another to function correctly. Here’s a generalized overview of what takes place when a user interacts with a web application
Sending. First, your user makes a request for a particular web page on your web app. They can do this, for example, by typing a URL into their browser
Receiving. This request gets received by the web server that hosts your website
Matching. Your web server now uses a program to match the user’s request to a particular portion of your Python script
Running. The appropriate Python code is called up by that program. When your code runs, it writes out a web page as a response
Delivering. The program then delivers this response back to your user through the web server
Viewing. Finally, the user can view the web server’s response. For example, the resulting web page can be displayed in a browser
This is a general process of how content is delivered over the Internet. The programming language used on the server, as well as the technologies used to establish that connection, can differ. However, the concept used to communicate across HTTP requests and responses remains the same and is called the HTTP Request-Response Cycle
Note. Flask will handle most of this complexity for you, but it can help to keep a loose understanding of this process in mind
To allow Flask to handle requests on the server side, you’ll need to find a place where your Python code can live online. Storing your code online to run a web application is called web hosting, and there are a number of providers offering both paid and free web hosting
Choose a Hosting Provider. Google App Engine
When choosing a web hosting provider, you need to confirm that it supports running Python code. Many of them cost money, but this tutorial will stick with a free option that’s professional and highly scalable yet still reasonable to set up. Google App Engine
Note. Google App Engine enforces daily quotas for each application. If your web application exceeds these quotas, then Google will start billing you. If you’re a new Google Cloud customer, then you can get a promotional free credit when signing up
There are a number of other free options, such as PythonAnywhere, Repl. nó hoặc Heroku mà bạn có thể khám phá sau này. Việc sử dụng Google App Engine sẽ mang lại cho bạn một khởi đầu thuận lợi khi tìm hiểu về cách triển khai mã Python cho web vì nó tạo ra sự cân bằng giữa việc trừu tượng hóa độ phức tạp và cho phép bạn tùy chỉnh thiết lập
Google App Engine là một phần của Google Cloud Platform [GCP], do Google điều hành và đại diện cho một trong những nhà cung cấp đám mây lớn, cùng với Microsoft Azure và Amazon Web Services [AWS]
Để bắt đầu với GCP, hãy tải xuống và cài đặt Google Cloud SDK cho hệ điều hành của bạn. Để có hướng dẫn bổ sung ngoài những gì bạn sẽ tìm thấy trong hướng dẫn này, bạn có thể tham khảo tài liệu của Google App Engine
Ghi chú. Bạn sẽ làm việc với môi trường tiêu chuẩn Python 3. Môi trường tiêu chuẩn của Google App Engine hỗ trợ thời gian chạy Python 3 và cung cấp một bậc miễn phí
Bản cài đặt Google Cloud SDK cũng bao gồm một chương trình dòng lệnh có tên là
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
9, sau này bạn sẽ sử dụng chương trình này để triển khai ứng dụng web của mình. Sau khi hoàn tất cài đặt, bạn có thể xác minh rằng mọi thứ đã hoạt động bằng cách nhập lệnh sau vào bảng điều khiển của mình$ gcloud --version
Bạn sẽ nhận được một đầu ra văn bản trong thiết bị đầu cuối của mình trông giống như bên dưới
app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
Số phiên bản của bạn có thể sẽ khác, nhưng miễn là chương trình
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
9 được tìm thấy thành công trên máy tính của bạn, thì quá trình cài đặt của bạn đã thành côngVới tổng quan cấp cao về các khái niệm này và đã cài đặt Google Cloud SDK, bạn đã sẵn sàng thiết lập một dự án Python mà sau này bạn sẽ triển khai trên Internet
Loại bỏ các quảng cáoXây dựng một ứng dụng web Python cơ bản
Google App Engine yêu cầu bạn sử dụng khung web để tạo ứng dụng web của bạn trong môi trường Python 3. Vì bạn đang cố gắng sử dụng một thiết lập tối thiểu để tải mã Python cục bộ của mình lên Internet, nên một vi khung như Flask là một lựa chọn tốt. Việc triển khai Flask ở mức tối thiểu nhỏ đến mức bạn thậm chí có thể không nhận thấy rằng mình đang sử dụng một khung web
Ghi chú. Nếu trước đây bạn đã làm việc với Google App Engine trên Python 2. 7, thì bạn sẽ nhận thấy rằng quy trình đã thay đổi đáng kể
Hai thay đổi đáng chú ý là webapp2 đã ngừng hoạt động và bạn không còn có thể chỉ định URL cho nội dung động trong tệp
Flask==2.1.2
1. Lý do cho cả hai thay đổi này là Google App Engine hiện yêu cầu bạn sử dụng khung web PythonỨng dụng bạn sắp tạo sẽ dựa trên một số tệp khác nhau, vì vậy điều đầu tiên bạn cần làm là tạo một thư mục dự án để chứa tất cả các tệp này
Thiết lập dự án của bạn
Tạo một thư mục dự án và đặt cho nó một cái tên mô tả về dự án của bạn. Đối với dự án thực hành này, hãy gọi thư mục
Flask==2.1.2
2. Bạn sẽ cần ba tệp trong thư mục này
3 chứa mã Python của bạn được bao bọc trong một triển khai tối thiểu của khung web FlaskFlask==2.1.2
4 liệt kê tất cả các phụ thuộc mà mã của bạn cần để hoạt động bình thườngFlask==2.1.2
1 giúp Google App Engine quyết định cài đặt nào sẽ sử dụng trên máy chủ của nóFlask==2.1.2
Mặc dù ba tệp nghe có vẻ nhiều, nhưng bạn sẽ thấy rằng dự án này sử dụng ít hơn mười dòng mã trên cả ba tệp. Điều này thể hiện thiết lập tối thiểu mà bạn cần cung cấp cho Google App Engine cho bất kỳ dự án Python nào mà bạn có thể khởi chạy. Phần còn lại sẽ là mã Python của riêng bạn. Bạn có thể tải xuống mã nguồn hoàn chỉnh mà bạn sẽ sử dụng trong hướng dẫn này bằng cách nhấp vào liên kết bên dưới
Nhận mã mẫu. Nhấp vào đây để lấy mã mẫu mà bạn sẽ sử dụng để tìm hiểu về cách tạo ứng dụng web Python bằng Flask trong hướng dẫn này
Tiếp theo, bạn sẽ xem nội dung của từng tệp bắt đầu với tệp phức tạp nhất,
Flask==2.1.2
3Tạo Flask==2.1.2
3
Flask==2.1.2
Flask==2.1.2
3 là tệp mà Flask sử dụng để phân phối nội dung của bạn. Ở đầu tệp, bạn nhập lớp Flask==2.1.2
9 ở dòng 1, sau đó bạn tạo một phiên bản của ứng dụng Flask ở dòng 3 1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
Sau khi bạn tạo Flask
runtime: python38
0, bạn viết một trình trang trí Python trên dòng 5 có tên là runtime: python38
1 mà Flask sử dụng để kết nối các điểm cuối URL với mã có trong các hàm. Đối số của runtime: python38
1 xác định thành phần đường dẫn của URL, là đường dẫn gốc [runtime: python38
3] trong trường hợp nàyMã trên dòng 6 và 7 tạo thành
runtime: python38
4, được bao bọc bởi bộ trang trí. Hàm này xác định những gì sẽ được thực thi nếu điểm cuối URL đã xác định được người dùng yêu cầu. Giá trị trả về của nó xác định những gì người dùng sẽ thấy khi họ tải trangGhi chú. Việc đặt tên cho
runtime: python38
4 chỉ là quy ước. Nó liên quan đến cách trang chính của một trang web thường được gọi là runtime: python38
6. Bạn có thể chọn tên hàm khác nếu muốnNói cách khác, nếu người dùng nhập URL cơ sở của ứng dụng web của bạn vào trình duyệt của họ, thì Flask sẽ chạy
runtime: python38
4 và người dùng sẽ thấy văn bản được trả về. Trong trường hợp này, văn bản đó chỉ là một câu. runtime: python38
8Bạn có thể hiển thị nội dung phức tạp hơn và bạn cũng có thể tạo nhiều chức năng để người dùng có thể truy cập các điểm cuối URL khác nhau trong ứng dụng của bạn để nhận các phản hồi khác nhau. Tuy nhiên, đối với lần triển khai ban đầu này, bạn nên gắn bó với thông báo thành công ngắn gọn và đáng khích lệ này
Tạo Flask==2.1.2
4
Flask==2.1.2
Tệp tiếp theo cần xem là
Flask==2.1.2
4. Vì Flask là phần phụ thuộc duy nhất của dự án này, nên đó là tất cả những gì bạn cần chỉ địnhFlask==2.1.2
Nếu ứng dụng của bạn có các phần phụ thuộc khác, thì bạn cũng cần thêm chúng vào tệp
Flask==2.1.2
4 của mìnhGoogle App Engine sẽ sử dụng
Flask==2.1.2
4 để cài đặt các phần phụ thuộc Python cần thiết cho dự án của bạn khi thiết lập dự án trên máy chủ. Điều này tương tự như những gì bạn sẽ làm sau khi tạo và kích hoạt cục bộ một môi trường ảo mớiLoại bỏ các quảng cáoTạo Flask==2.1.2
1
Flask==2.1.2
Tệp thứ ba,
Flask==2.1.2
1, giúp Google App Engine thiết lập môi trường máy chủ phù hợp cho mã của bạn. Tệp này chỉ yêu cầu một dòng, xác định thời gian chạy Pythonruntime: python38
Dòng hiển thị ở trên làm rõ rằng thời gian chạy phù hợp cho mã Python của bạn là Python 3. 8. Điều này là đủ để Google App Engine thực hiện thiết lập cần thiết trên các máy chủ của nó
Ghi chú. Đảm bảo rằng Môi trường thời gian chạy Python 3 mà bạn muốn sử dụng có sẵn trên Google App Engine
Bạn có thể sử dụng tệp
Flask==2.1.2
1 của Google App Engine để thiết lập bổ sung, chẳng hạn như thêm các biến môi trường vào ứng dụng của bạn. Bạn cũng có thể sử dụng nó để xác định đường dẫn đến nội dung tĩnh cho ứng dụng của mình, chẳng hạn như hình ảnh, tệp CSS hoặc JavaScript. Hướng dẫn này sẽ không đi sâu vào các cài đặt bổ sung này nhưng bạn có thể tham khảo tài liệu của Google App Engine trên Tệp cấu hình Flask==2.1.2
1 nếu bạn muốn thêm chức năng đóChín dòng mã này hoàn tất quá trình thiết lập cần thiết cho ứng dụng này. Dự án của bạn hiện đã sẵn sàng để triển khai
Tuy nhiên, bạn nên kiểm tra mã của mình trước khi đưa mã vào sản xuất để có thể phát hiện các lỗi tiềm ẩn. Tiếp theo, bạn sẽ kiểm tra xem mọi thứ có hoạt động cục bộ như mong đợi hay không trước khi triển khai mã của bạn lên Internet
Kiểm tra cục bộ
Flask đi kèm với một máy chủ web phát triển. Bạn có thể sử dụng máy chủ phát triển này để kiểm tra kỹ xem mã của bạn có hoạt động như mong đợi không. Để có thể chạy cục bộ máy chủ phát triển Flask, bạn cần hoàn thành hai bước. Google App Engine sẽ thực hiện các bước tương tự trên máy chủ của Google sau khi bạn triển khai mã của mình
- Thiết lập môi trường ảo
- Cài đặt gói
7$ python3 -m venv venv
Để thiết lập môi trường ảo Python 3, hãy điều hướng đến thư mục dự án của bạn trên thiết bị đầu cuối và nhập lệnh sau
$ python3 -m venv venv
Thao tác này sẽ tạo một môi trường ảo mới có tên là
$ python3 -m venv venv
8 sử dụng phiên bản Python 3 mà bạn đã cài đặt trên hệ thống của mình. Tiếp theo, bạn cần kích hoạt môi trường ảo bằng cách tìm nguồn tập lệnh kích hoạt$ source venv/bin/activate
Sau khi thực hiện lệnh này, lời nhắc của bạn sẽ thay đổi để cho biết rằng bạn hiện đang hoạt động từ bên trong môi trường ảo. Sau khi thiết lập và kích hoạt thành công môi trường ảo của mình, bạn đã sẵn sàng cài đặt Flask
$ python3 -m pip install -r requirements.txt
Lệnh này tìm nạp tất cả các gói được liệt kê trong
Flask==2.1.2
4 từ PyPI và cài đặt chúng trong môi trường ảo của bạn. In this case, the only package installed will be FlaskĐợi quá trình cài đặt hoàn tất, sau đó mở
Flask==2.1.2
3 và thêm hai dòng mã sau vào cuối tệpif __name__ == "__main__":
app.run[host="127.0.0.1", port=8080, debug=True]
Hai dòng này báo cho Python khởi động máy chủ phát triển của Flask khi tập lệnh được thực thi từ dòng lệnh. Nó sẽ chỉ được sử dụng khi bạn chạy tập lệnh cục bộ. Khi bạn triển khai mã cho Google App Engine, một quy trình máy chủ web chuyên nghiệp, chẳng hạn như Gunicorn, sẽ phục vụ ứng dụng thay thế. Bạn sẽ không cần phải thay đổi bất cứ điều gì để thực hiện điều này
Giờ đây, bạn có thể khởi động máy chủ phát triển của Flask và tương tác với ứng dụng Python trong trình duyệt của mình. Để làm như vậy, bạn cần chạy tập lệnh Python khởi động ứng dụng Flask bằng cách nhập lệnh sau
$ gcloud --version
0Flask khởi động máy chủ phát triển và thiết bị đầu cuối của bạn sẽ hiển thị đầu ra tương tự như văn bản hiển thị bên dưới
$ gcloud --version
1Đầu ra này cho bạn biết ba thông tin quan trọng
1. Đây là máy chủ phát triển của Flask, có nghĩa là bạn không muốn sử dụng nó để phục vụ mã của mình trong quá trình sản xuất. Thay vào đó, Google App Engine sẽ xử lý việc đó cho bạn$ source venv/bin/activate
2. Đây là URL nơi bạn có thể tìm thấy ứng dụng của mình. Đó là URL cho máy chủ cục bộ của bạn, có nghĩa là ứng dụng đang chạy trên máy tính của chính bạn. Điều hướng đến URL đó trong trình duyệt của bạn để xem mã của bạn trực tiếp$ source venv/bin/activate
______41_______3. Dòng tương tự cũng cho bạn biết rằng bạn có thể thoát khỏi máy chủ phát triển bằng cách nhấn Ctrl + C on your keyboard.
Làm theo hướng dẫn và mở tab trình duyệt tại
$ source venv/bin/activate
4. Bạn sẽ thấy một trang hiển thị văn bản mà hàm của bạn trả về. runtime: python38
8Ghi chú. URL
$ source venv/bin/activate
6 còn được gọi là localhost, có nghĩa là nó trỏ đến máy tính của chính bạn. Số $ source venv/bin/activate
7 theo sau dấu hai chấm [$ source venv/bin/activate
8] được gọi là số cổng. Cổng có thể được coi là một kênh cụ thể, tương tự như phát một kênh truyền hình hoặc đài phát thanhBạn đã xác định các giá trị này trong
$ source venv/bin/activate
9 trong tệp Flask==2.1.2
3 của mình. Chạy ứng dụng trên cổng $ source venv/bin/activate
7 có nghĩa là bạn có thể điều chỉnh số cổng này và nhận thông tin liên lạc từ máy chủ phát triển. Cổng $ source venv/bin/activate
7 thường được sử dụng để thử nghiệm cục bộ, nhưng bạn cũng có thể sử dụng một số khácBạn có thể sử dụng máy chủ phát triển của Flask để kiểm tra mọi thay đổi mà bạn thực hiện đối với mã của ứng dụng Python của mình. Máy chủ lắng nghe những thay đổi bạn thực hiện trong mã và sẽ tự động tải lại để hiển thị chúng. Nếu ứng dụng của bạn không hiển thị như bạn mong đợi trên máy chủ phát triển, thì ứng dụng đó cũng sẽ không hoạt động trong sản xuất. Vì vậy, hãy chắc chắn rằng nó trông ổn trước khi bạn triển khai nó
Ngoài ra, hãy nhớ rằng ngay cả khi nó hoạt động tốt tại địa phương, nó có thể không hoạt động hoàn toàn giống như vậy sau khi được triển khai. Điều này là do có các yếu tố khác liên quan khi bạn triển khai mã của mình cho Google App Engine. Tuy nhiên, đối với một ứng dụng cơ bản chẳng hạn như ứng dụng bạn đang xây dựng trong hướng dẫn này, bạn có thể tin tưởng rằng nó sẽ hoạt động trong môi trường sản xuất nếu nó hoạt động tốt tại địa phương
Tập thể dục. Thực hành và khám pháHiển thị/Ẩn
Thay đổi giá trị trả về của
runtime: python38
4 và xác nhận rằng bạn có thể thấy thay đổi được phản ánh trong trình duyệt của mình. Chơi xung quanh với nó. Điều gì xảy ra khi bạn thay đổi giá trị trả về của runtime: python38
4 thành mã HTML, chẳng hạn như $ python3 -m pip install -r requirements.txt
5, thay vì sử dụng chuỗi văn bản thuần túy?Sau khi đã kiểm tra thiết lập của bạn và chức năng của mã trên máy chủ phát triển cục bộ của bạn, bạn đã sẵn sàng triển khai mã đó cho Google App Engine
Loại bỏ các quảng cáoTriển khai ứng dụng web Python của bạn
Cuối cùng cũng đến lúc đưa ứng dụng của bạn lên mạng. Nhưng trước tiên, mã của bạn cần có một nơi để tồn tại trên các máy chủ của Google và bạn cần đảm bảo rằng mã đó đến đó một cách an toàn. Trong phần hướng dẫn này, bạn sẽ hoàn thành các thiết lập triển khai cần thiết cả trên đám mây và cục bộ
Thiết lập trên Google App Engine
Đọc qua quy trình thiết lập bên dưới từng bước. Bạn có thể so sánh những gì bạn thấy trong trình duyệt của mình với ảnh chụp màn hình. Tên dự án được sử dụng trong các ảnh chụp màn hình ví dụ là
Flask==2.1.2
2Bắt đầu bằng cách đăng nhập vào Google Cloud Platform. Điều hướng đến chế độ xem trang tổng quan, nơi bạn sẽ thấy một thanh công cụ ở đầu cửa sổ. Chọn nút mũi tên hướng xuống phía bên trái của thanh công cụ. Điều này sẽ bật lên một phương thức chứa danh sách các dự án Google của bạn
Phương thức hiển thị danh sách các dự án của bạn. Danh sách có thể trống nếu bạn chưa tạo bất kỳ dự án nào. Ở trên cùng bên phải của phương thức đó, hãy tìm nút DỰ ÁN MỚI và nhấp vào nút đó
Nhấp vào DỰ ÁN MỚI sẽ chuyển hướng bạn đến một trang mới nơi bạn có thể quyết định tên cho dự án của mình. Tên này sẽ xuất hiện trong URL của ứng dụng của bạn, trông giống như tên
$ python3 -m pip install -r requirements.txt
7. Sử dụng Flask==2.1.2
2 làm tên cho dự án này để phù hợp với hướng dẫnBạn có thể thấy ID dự án của mình bên dưới trường nhập Tên dự án. ID dự án bao gồm tên bạn đã nhập và một số mà Google App Engine thêm vào. Trong trường hợp của hướng dẫn này, bạn có thể thấy ID dự án là
$ python3 -m pip install -r requirements.txt
9. Sao chép ID dự án cá nhân của bạn vì sau này bạn sẽ cần nó để triển khaiGhi chú. Vì ID dự án cần phải là duy nhất, số của bạn sẽ khác với số được hiển thị trong hướng dẫn này
Bây giờ, bạn có thể nhấp vào TẠO và đợi dự án được thiết lập ở phía Google App Engine. Khi đã xong, một thông báo sẽ bật lên cho bạn biết rằng một dự án mới đã được tạo. Nó cũng cung cấp cho bạn tùy chọn để chọn nó. Hãy tiếp tục và làm điều đó bằng cách nhấp vào CHỌN DỰ ÁN
Nhấp vào CHỌN DỰ ÁN sẽ chuyển hướng bạn đến trang chính của dự án Google Cloud Platform mới của bạn. Nó trông như thế này
Từ đây, bạn muốn chuyển sang trang tổng quan của Google App Engine. Bạn có thể làm điều đó bằng cách nhấp vào menu hamburger ở trên cùng bên trái, cuộn xuống để chọn Máy ứng dụng trong danh sách đầu tiên, sau đó chọn Trang tổng quan ở đầu danh sách bật lên tiếp theo
Điều này cuối cùng sẽ chuyển hướng bạn đến giao diện bảng điều khiển Google App Engine của dự án mới của bạn. Vì dự án trống cho đến nay, trang sẽ trông giống như thế này
Khi bạn nhìn thấy trang này có nghĩa là bạn đã hoàn thành việc thiết lập một dự án mới trên Google App Engine. Bây giờ, bạn đã sẵn sàng quay lại thiết bị đầu cuối trên máy tính của mình và hoàn thành các bước cục bộ cần thiết để triển khai ứng dụng của bạn cho dự án này
Loại bỏ các quảng cáoThiết lập cục bộ để triển khai
Sau khi cài đặt thành công Google Cloud SDK, bạn có quyền truy cập vào giao diện dòng lệnh
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
9. Chương trình này đi kèm với các hướng dẫn hữu ích giúp bạn triển khai ứng dụng web của mình. Bắt đầu bằng cách nhập lệnh được gợi ý cho bạn khi bạn tạo một dự án mới trên trang web Google App EngineNhư bạn có thể thấy ở góc dưới cùng bên phải của trang, Google App Engine đề xuất một lệnh đầu cuối để triển khai mã của bạn cho dự án này. Mở thiết bị đầu cuối của bạn, điều hướng đến thư mục dự án của bạn, sau đó chạy lệnh được đề xuất
$ gcloud --version
2Khi bạn thực hiện lệnh này mà không có bất kỳ thiết lập nào trước đó, chương trình sẽ phản hồi bằng một thông báo lỗi
$ gcloud --version
3Bạn nhận được thông báo lỗi này vì bạn không thể triển khai bất kỳ mã nào vào tài khoản Google App Engine của mình trừ khi bạn chứng minh với Google rằng bạn là chủ sở hữu của tài khoản đó. Bạn sẽ cần xác thực bằng tài khoản Google App Engine từ máy tính cục bộ của mình
Ứng dụng dòng lệnh
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
9 đã cung cấp cho bạn lệnh mà bạn cần chạy. Nhập nó vào thiết bị đầu cuối của bạn$ gcloud --version
4Thao tác này sẽ bắt đầu quá trình xác thực bằng cách tạo URL xác thực và mở nó trong trình duyệt của bạn. Hoàn tất quy trình bằng cách chọn tài khoản Google của bạn trong cửa sổ trình duyệt và cấp cho Google Cloud SDK các đặc quyền cần thiết. Sau khi thực hiện việc này, bạn có thể quay lại thiết bị đầu cuối của mình, nơi bạn sẽ thấy một số thông tin về quy trình xác thực
$ gcloud --version
5Nếu bạn thấy thông báo này, thì xác thực đã thành công. Bạn cũng có thể thấy rằng chương trình dòng lệnh lại cung cấp cho bạn thông tin hữu ích về bước tiếp theo của bạn
Nó cho bạn biết rằng hiện tại không có bộ dự án nào và bạn có thể đặt một bộ bằng cách chạy
if __name__ == "__main__":
app.run[host="127.0.0.1", port=8080, debug=True]
2. Bây giờ bạn sẽ cần ID dự án mà bạn đã lưu ý trước đóGhi chú. Bạn luôn có thể lấy ID dự án của mình bằng cách truy cập trang web Google App Engine và nhấp vào mũi tên hướng xuống để hiển thị phương thức hiển thị tất cả các dự án Google của bạn. ID dự án được liệt kê ở bên phải tên dự án của bạn và thường bao gồm tên dự án và một số có sáu chữ số
Đảm bảo thay thế
$ python3 -m pip install -r requirements.txt
9 bằng ID dự án của riêng bạn khi chạy lệnh được đề xuất$ gcloud --version
6Thiết bị đầu cuối của bạn sẽ in ra một thông báo phản hồi ngắn rằng thuộc tính dự án đã được cập nhật. Sau khi xác thực thành công và đặt dự án mặc định thành ID dự án của bạn, bạn đã hoàn thành các bước thiết lập cần thiết
Chạy quy trình triển khai
Bây giờ bạn đã sẵn sàng thử lệnh triển khai ban đầu lần thứ hai
$ gcloud --version
2Ứng dụng
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
9 tìm nạp thông tin đăng nhập xác thực của bạn cũng như thông tin ID dự án từ cấu hình mặc định mà bạn vừa thiết lập và cho phép bạn tiếp tục. Tiếp theo, bạn cần chọn một khu vực nơi ứng dụng của bạn sẽ được lưu trữ$ gcloud --version
8Nhập một trong các số được liệt kê ở bên trái và nhấn Enter .
Note. Không quan trọng bạn chọn khu vực nào cho ứng dụng này. Tuy nhiên, nếu bạn đang xây dựng một ứng dụng lớn có lưu lượng truy cập đáng kể, thì bạn sẽ muốn triển khai ứng dụng đó tới một máy chủ gần với hầu hết người dùng của bạn.
Sau khi bạn nhập một số, CLI sẽ tiếp tục quá trình thiết lập. Trước khi triển khai mã của bạn cho Google App Engine, mã sẽ hiển thị cho bạn tổng quan về việc triển khai sẽ như thế nào và yêu cầu bạn xác nhận lần cuối
$ gcloud --version
9Sau khi bạn xác nhận thiết lập bằng cách nhập Y , quá trình triển khai của bạn cuối cùng sẽ bắt đầu. Thiết bị đầu cuối của bạn sẽ hiển thị cho bạn thêm một số thông tin và hình ảnh động tải nhỏ trong khi Google App Engine thiết lập dự án của bạn trên các máy chủ của nó.
app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
0Vì đây là lần triển khai đầu tiên ứng dụng web của bạn nên có thể mất vài phút để hoàn tất. Sau khi triển khai xong, bạn sẽ thấy một kết quả hữu ích khác trong bảng điều khiển. Nó sẽ trông giống như bên dưới
app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
1Giờ đây, bạn có thể điều hướng đến URL được đề cập trong trình duyệt của mình hoặc nhập lệnh được đề xuất
if __name__ == "__main__":
app.run[host="127.0.0.1", port=8080, debug=True]
5 để truy cập ứng dụng web trực tiếp của bạn. Bạn sẽ thấy cùng một phản hồi văn bản ngắn mà bạn đã thấy trước đó khi chạy ứng dụng trên máy chủ cục bộ của mình. runtime: python38
8Lưu ý rằng trang web này có một URL mà bạn có thể chia sẻ với những người khác và họ sẽ có thể truy cập nó. Bây giờ bạn đã có một ứng dụng web Python trực tiếp
Tập thể dục. Thực hành và khám pháHiển thị/Ẩn
Thay đổi lại giá trị trả về của
runtime: python38
4 và triển khai ứng dụng của bạn lần thứ hai bằng cách sử dụng lệnh if __name__ == "__main__":
app.run[host="127.0.0.1", port=8080, debug=True]
8. Xác nhận rằng bạn có thể thấy thay đổi được phản ánh trên trang web trực tiếp trong trình duyệt của mìnhVới điều này, bạn đã hoàn thành các bước cần thiết để đưa mã Python cục bộ của mình lên web. Tuy nhiên, chức năng duy nhất mà bạn đặt trực tuyến cho đến nay là in ra một chuỗi văn bản
Thời gian để đẩy nó lên. Theo quy trình tương tự, bạn sẽ mang đến nhiều chức năng thú vị hơn trực tuyến trong phần tiếp theo. Bạn sẽ cấu trúc lại mã của tập lệnh chuyển đổi nhiệt độ cục bộ thành ứng dụng web Flask
Loại bỏ các quảng cáoChuyển đổi tập lệnh thành ứng dụng web
Vì hướng dẫn này nói về việc tạo và triển khai các ứng dụng web Python từ mã bạn đã có, mã Python cho tập lệnh chuyển đổi nhiệt độ được cung cấp cho bạn tại đây
app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
2Đây là một tập lệnh ngắn cho phép người dùng chuyển đổi nhiệt độ độ C sang nhiệt độ độ F tương đương
Tập thể dục. Thực hành và khám pháHiển thị/Ẩn
Lưu mã dưới dạng tập lệnh Python và chạy thử. Đảm bảo rằng nó hoạt động như mong đợi và bạn hiểu những gì nó làm. Vui lòng cải thiện mã
Với tập lệnh hoạt động này trong tay, bây giờ bạn sẽ cần thay đổi mã để tích hợp nó vào ứng dụng Flask của mình. Có hai điểm chính cần xem xét để làm điều đó
- Chấp hành. Làm cách nào để ứng dụng web biết khi nào nên chạy mã?
- đầu vào của người dùng. Ứng dụng web sẽ thu thập thông tin đầu vào của người dùng như thế nào?
Bạn đã học cách yêu cầu Flask thực thi một đoạn mã cụ thể bằng cách thêm mã vào một chức năng mà bạn chỉ định tuyến đường cho nó. Bắt đầu bằng cách giải quyết nhiệm vụ này trước
Thêm mã dưới dạng chức năng
Flask tách các tác vụ khác nhau thành các chức năng khác nhau, mỗi chức năng được chỉ định một lộ trình thông qua trình trang trí
runtime: python38
1. Khi người dùng truy cập tuyến đường đã chỉ định qua URL của nó, mã bên trong chức năng tương ứng sẽ được thực thiBắt đầu bằng cách thêm
$ gcloud --version
00 vào tệp Flask==2.1.2
3 của bạn và bọc nó bằng trình trang trí runtime: python38
1app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
3Cho đến giờ, bạn mới chỉ sao chép mã của tập lệnh Python vào một hàm trong ứng dụng Flask của mình và thêm trình trang trí
runtime: python38
1Tuy nhiên, đã xảy ra sự cố với thiết lập này. Điều gì xảy ra khi bạn chạy mã trong máy chủ phát triển của mình?
Hiện tại, cả hai chức năng của bạn đều được kích hoạt bởi cùng một lộ trình [
runtime: python38
3]. Khi người dùng truy cập tuyến đường đó, Flask sẽ chọn chức năng đầu tiên khớp với nó và thực thi mã đó. Trong trường hợp của bạn, điều này có nghĩa là $ gcloud --version
00 không bao giờ được thực thi vì runtime: python38
4 khớp với cùng một tuyến đường và được gọi trướcChức năng thứ hai của bạn sẽ cần có tuyến đường riêng để có thể truy cập được. Ngoài ra, bạn vẫn cần cho phép người dùng cung cấp thông tin đầu vào cho chức năng của mình
Truyền giá trị cho mã của bạn
Bạn có thể giải quyết cả hai nhiệm vụ này bằng cách yêu cầu Flask xử lý bất kỳ phần còn lại nào của URL sau URL cơ sở dưới dạng giá trị và chuyển nó cho hàm của bạn. Điều này chỉ yêu cầu một thay đổi nhỏ đối với tham số của trình trang trí
runtime: python38
1 trước $ gcloud --version
00app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
4Cú pháp dấu ngoặc nhọn [
$ gcloud --version
09] yêu cầu Flask ghi lại bất kỳ văn bản nào sau URL cơ sở [runtime: python38
3] và chuyển nó tới hàm mà trình trang trí kết thúc dưới dạng biến $ gcloud --version
11. Lưu ý rằng $ gcloud --version
00 yêu cầu đầu vào là ____6_______11Ghi chú. Đảm bảo rằng thành phần đường dẫn URL bạn đang chụp có cùng tên với tham số bạn đang chuyển đến hàm của mình. Nếu không, Flask sẽ bị nhầm lẫn và sẽ cho bạn biết về điều đó bằng cách hiển thị cho bạn một thông báo lỗi
Quay trở lại trình duyệt web của bạn và thử chức năng mới bằng máy chủ phát triển của Flask. Giờ đây, bạn có thể truy cập cả hai chức năng của mình thông qua ứng dụng web bằng cách sử dụng các điểm cuối URL khác nhau
- Mục lục [
14]. Nếu bạn truy cập URL cơ sở, thì bạn sẽ thấy thông báo khuyến khích ngắn từ trước đó$ gcloud --version
- độ C [____6_______15]. Nếu bạn thêm một số sau dấu gạch chéo lên, thì bạn sẽ thấy nhiệt độ đã chuyển đổi xuất hiện trong trình duyệt của mình
Chơi xung quanh nó thêm một chút và thử nhập các đầu vào khác nhau. Ngay cả việc xử lý lỗi từ tập lệnh của bạn vẫn hoạt động và hiển thị thông báo khi người dùng nhập đầu vào không phải là số. Ứng dụng web của bạn xử lý chức năng tương tự như tập lệnh Python của bạn đã thực hiện cục bộ, chỉ bây giờ bạn mới có thể triển khai nó lên Internet
Loại bỏ các quảng cáoTái cấu trúc mã của bạn
Flask là một khung web hoàn thiện cho phép bạn giao nhiều nhiệm vụ cho các thành viên bên trong của nó. Ví dụ: bạn có thể để Flask xử lý việc kiểm tra kiểu đầu vào cho hàm của bạn và trả về thông báo lỗi nếu nó không phù hợp. Tất cả điều này có thể được thực hiện với một cú pháp ngắn gọn bên trong tham số tới
runtime: python38
1. Thêm phần sau vào trình chụp đường dẫn của bạnapp-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
5Thêm
$ gcloud --version
17 trước tên biến để Flask kiểm tra xem đầu vào mà nó nhận được từ URL có thể được chuyển đổi thành số nguyên hay không. If it can, then the content is passed on to $ gcloud --version
00. Nếu không thể, Flask sẽ hiển thị trang lỗi $ gcloud --version
19Ghi chú. Lỗi
$ gcloud --version
19 có nghĩa là Flask đã cố khớp thành phần đường dẫn mà nó đã lấy ra từ URL với bất kỳ chức năng nào mà nó biết vềTuy nhiên, các mẫu duy nhất mà nó hiện biết là đường dẫn cơ sở trống [
$ gcloud --version
14] và đường dẫn cơ sở theo sau là một số, chẳng hạn như $ gcloud --version
15. Vì một văn bản như $ gcloud --version
23 không khớp với bất kỳ mẫu nào trong số này, nó cho bạn biết rằng không tìm thấy URL được yêu cầu trên máy chủSau khi áp dụng kiểm tra loại của Flask, giờ đây bạn có thể xóa khối
$ gcloud --version
24 … $ gcloud --version
25 trong $ gcloud --version
00 một cách an toàn. Chỉ các số nguyên mới được Flask chuyển vào hàmapp-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
6Với điều này, bạn đã hoàn thành việc chuyển đổi tập lệnh chuyển đổi nhiệt độ của mình thành một ứng dụng web. Xác nhận rằng mọi thứ hoạt động cục bộ như dự kiến, sau đó triển khai lại ứng dụng của bạn lên Google App Engine
Tập thể dục. Thực hành và khám pháHiển thị/Ẩn
Tái cấu trúc
runtime: python38
4. Nó sẽ trả về văn bản giải thích cách sử dụng ứng dụng web chuyển đổi nhiệt độ. Hãy nhớ rằng bạn có thể sử dụng các thẻ HTML trong chuỗi trả về. HTML sẽ hiển thị chính xác trên trang đích của bạnSau khi triển khai thành công ứng dụng web chuyển đổi nhiệt độ của bạn lên Internet, bây giờ bạn có một liên kết mà bạn có thể chia sẻ với những người khác và cho phép họ chuyển đổi nhiệt độ độ C sang nhiệt độ độ F
Tuy nhiên, giao diện trông vẫn khá cơ bản và ứng dụng web hoạt động giống API hơn là ứng dụng web giao diện người dùng. Nhiều người dùng có thể không biết cách tương tác với ứng dụng web Python của bạn ở trạng thái hiện tại. Điều này cho bạn thấy những hạn chế của việc sử dụng Python thuần túy để phát triển web
Nếu bạn muốn tạo các giao diện trực quan hơn, thì bạn sẽ cần bắt đầu sử dụng ít nhất một chút HTML
Trong phần tiếp theo, bạn sẽ tiếp tục lặp lại mã của mình và sử dụng HTML để tạo hộp nhập liệu cho phép người dùng nhập số trực tiếp trên trang thay vì thông qua URL
Cải thiện giao diện người dùng của ứng dụng web của bạn
Trong phần này, bạn sẽ tìm hiểu cách thêm phần tử đầu vào HTML
$ gcloud --version
28 vào ứng dụng web của mình để cho phép người dùng tương tác với nó theo cách đơn giản mà họ đã quen với các ứng dụng trực tuyến khácĐể cải thiện giao diện người dùng và trải nghiệm người dùng cho ứng dụng web của bạn, bạn sẽ cần làm việc với các ngôn ngữ khác ngoài Python, cụ thể là các ngôn ngữ giao diện người dùng như HTML, CSS và JavaScript. Hướng dẫn này tránh đi sâu vào những điều này càng nhiều càng tốt, để tập trung vào việc sử dụng Python
Tuy nhiên, nếu bạn muốn thêm hộp nhập liệu vào ứng dụng web của mình thì bạn sẽ cần sử dụng một số HTML. Bạn sẽ chỉ triển khai ở mức tối thiểu tuyệt đối để ứng dụng web của bạn trông giống một trang web mà người dùng sẽ quen thuộc hơn. Bạn sẽ sử dụng phần tử HTML
$ gcloud --version
28 để thu thập thông tin đầu vào của họGhi chú. Nếu bạn muốn tìm hiểu thêm về HTML, hãy xem Real Python's HTML and CSS for Python Developers hoặc MDN's Introduction to HTML
Sau khi cập nhật ứng dụng web của bạn, bạn sẽ có một trường văn bản nơi người dùng có thể nhập nhiệt độ theo độ C. Sẽ có một nút Chuyển đổi để chuyển đổi nhiệt độ C do người dùng cung cấp thành độ F
Kết quả chuyển đổi sẽ được hiển thị trên dòng tiếp theo và sẽ được cập nhật bất cứ khi nào người dùng nhấp vào Chuyển đổi
Bạn cũng sẽ thay đổi chức năng của ứng dụng để cả biểu mẫu và kết quả chuyển đổi đều được hiển thị trên cùng một trang. Bạn sẽ cấu trúc lại mã để bạn chỉ cần một điểm cuối URL duy nhất
Loại bỏ các quảng cáoThu thập đầu vào của người dùng
Bắt đầu bằng cách tạo phần tử
$ gcloud --version
28 trên trang đích của bạn. Sao chép vài dòng HTML sau vào câu lệnh trả về của runtime: python38
4, thay thế tin nhắn văn bản trước đóapp-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
7Khi bạn tải lại trang của mình tại URL cơ sở, bạn sẽ thấy một hộp nhập liệu và một nút. HTML hiển thị chính xác. Xin chúc mừng, bạn vừa tạo một biểu mẫu nhập liệu
Ghi chú. Hãy nhớ rằng bản thân một số dòng HTML này không tạo thành một trang HTML hợp lệ. Tuy nhiên, các trình duyệt hiện đại được thiết kế theo cách mà chúng có thể điền vào chỗ trống và tạo cấu trúc còn thiếu cho bạn
Điều gì xảy ra khi bạn nhập một giá trị rồi nhấp vào Chuyển đổi? . Nó hiện hiển thị một tham số truy vấn có giá trị sau URL cơ sở
Ví dụ: nếu bạn đã nhập
$ gcloud --version
32 vào hộp văn bản và nhấp vào nút, thì URL của bạn sẽ trông như thế này. $ gcloud --version
33. Đây là tin tốt. Giá trị đã được ghi lại thành công và được thêm dưới dạng tham số truy vấn vào yêu cầu HTTP GET. Thấy URL này có nghĩa là bạn đang yêu cầu lại URL cơ sở, nhưng lần này với một số giá trị bổ sung mà bạn đang gửi cùngTuy nhiên, hiện tại không có gì xảy ra với giá trị bổ sung đó. Mặc dù biểu mẫu được thiết lập như bình thường, nhưng nó vẫn chưa được kết nối chính xác với chức năng mã của ứng dụng web Python của bạn
Để hiểu cách tạo kết nối đó, bạn sẽ đọc về từng phần của phần tử
$ gcloud --version
28 để xem các phần khác nhau nói về điều gì. Bạn sẽ xem xét ba yếu tố sau đây và các thuộc tính của chúng một cách riêng biệt
28 phần tử$ gcloud --version
- ô nhập liệu
- gửi nút
Mỗi trong số này là các phần tử HTML riêng biệt. Mặc dù hướng dẫn này nhằm mục đích tập trung vào Python hơn là HTML, nhưng sẽ vẫn hữu ích nếu bạn có hiểu biết cơ bản về những gì diễn ra trong khối mã HTML này. Bắt đầu bằng cách nhìn vào phần tử HTML ngoài cùng
$ gcloud --version
28 Phần tử
$ gcloud --version
Phần tử
$ gcloud --version
28 tạo biểu mẫu HTML. Hai phần tử $ gcloud --version
38 khác được bọc bên trong nóapp-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
8Phần tử
$ gcloud --version
28 cũng chứa hai thuộc tính HTML có tên là $ gcloud --version
40 và $ gcloud --version
41
40 xác định nơi dữ liệu mà người dùng gửi sẽ được gửi. Bạn đang để giá trị dưới dạng một chuỗi trống ở đây, điều này làm cho trình duyệt của bạn hướng yêu cầu đến cùng một URL mà nó được gọi từ đó. Trong trường hợp của bạn, đó là URL cơ sở trống$ gcloud --version
41 xác định loại yêu cầu HTTP mà biểu mẫu tạo ra. Sử dụng giá trị mặc định của$ gcloud --version
44 sẽ tạo một yêu cầu HTTP GET. Điều này có nghĩa là dữ liệu do người dùng gửi sẽ hiển thị trong các tham số truy vấn URL. Nếu bạn đang gửi dữ liệu nhạy cảm hoặc giao tiếp với cơ sở dữ liệu thì bạn sẽ cần sử dụng yêu cầu HTTP POST để thay thế$ gcloud --version
Sau khi kiểm tra phần tử
$ gcloud --version
28 và các thuộc tính của nó, bước tiếp theo của bạn là xem xét kỹ hơn phần tử đầu tiên trong hai phần tử $ gcloud --version
38Hộp nhập liệu
Phần tử HTML thứ hai là phần tử
$ gcloud --version
38 được lồng bên trong phần tử $ gcloud --version
28app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
9Phần tử
$ gcloud --version
38 đầu tiên có hai thuộc tính HTML
50 xác định loại phần tử$ gcloud --version
38 sẽ được tạo. Có nhiều thứ để lựa chọn, chẳng hạn như hộp kiểm và phần tử thả xuống. In this case, you want the user to enter a number as text, so you’re setting the type to$ gcloud --version
52$ gcloud --version
53 xác định giá trị mà người dùng nhập vào sẽ được gọi là. Bạn có thể coi nó như chìa khóa của từ điển, trong đó giá trị là bất cứ thứ gì người dùng nhập vào hộp văn bản. Bạn đã thấy tên này hiển thị trong URL dưới dạng khóa của tham số truy vấn. Bạn sẽ cần khóa này sau để truy xuất giá trị do người dùng gửi$ gcloud --version
Các phần tử
$ gcloud --version
38 HTML có thể có các hình dạng khác nhau và một số trong số chúng yêu cầu các thuộc tính khác nhau. Bạn sẽ thấy một ví dụ về điều này khi xem phần tử $ gcloud --version
38 thứ hai, phần tử này tạo nút Gửi và là phần tử HTML cuối cùng tạo nên đoạn mã của bạnnút gửi
Phần tử
$ gcloud --version
38 thứ hai tạo nút cho phép người dùng của bạn gửi thông tin đầu vào của họ 1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
0Phần tử này cũng có hai thuộc tính HTML, được đặt tên là
$ gcloud --version
50 và $ gcloud --version
58
50 xác định loại phần tử đầu vào nào sẽ được tạo. Sử dụng giá trị$ gcloud --version
60 sẽ tạo một nút cho phép bạn gửi dữ liệu biểu mẫu được đóng gói trở đi$ gcloud --version
58 xác định văn bản mà nút sẽ hiển thị. Vui lòng thay đổi nó để xem nút hiển thị văn bản đã thay đổi của bạn như thế nào$ gcloud --version
Với tổng quan ngắn gọn này về các phần tử HTML khác nhau và các thuộc tính của chúng, giờ đây bạn đã hiểu rõ hơn về những gì bạn đang thêm vào mã Python của mình và những phần tử này được sử dụng để làm gì
Thông tin mà bạn sẽ cần để kết nối việc gửi biểu mẫu với mã Flask của bạn là giá trị
$ gcloud --version
53 của phần tử đầu tiên của $ gcloud --version
38, $ gcloud --version
11, mà bạn sẽ sử dụng để truy cập giá trị đã gửi trong hàm của mìnhTiếp theo, bạn sẽ tìm hiểu cách thay đổi mã Python của mình để xử lý chính xác thông tin đầu vào của biểu mẫu đã gửi
Loại bỏ các quảng cáoNhận đầu vào của người dùng
Trong thuộc tính
$ gcloud --version
40 của phần tử $ gcloud --version
28, bạn đã chỉ định rằng dữ liệu của biểu mẫu HTML của bạn sẽ được gửi trở lại cùng một URL mà nó đến từ đó. Bây giờ bạn cần bao gồm chức năng lấy giá trị trong runtime: python38
4. Đối với điều này, bạn cần thực hiện hai bướcNhập đối tượng
68 của Flask. Giống như nhiều khung web, Flask chuyển các yêu cầu HTTP dưới dạng các đối tượng toàn cầu. Để có thể sử dụng đối tượng toàn cầu$ gcloud --version
68 này, trước tiên bạn cần nhập nó$ gcloud --version
Lấy giá trị. Đối tượng
68 chứa giá trị đã gửi và cung cấp cho bạn quyền truy cập vào giá trị đó thông qua cú pháp từ điển Python. Bạn cần tìm nạp nó từ đối tượng toàn cầu để có thể sử dụng nó trong chức năng của mình$ gcloud --version
Viết lại mã của bạn và thêm hai thay đổi này ngay bây giờ. Bạn cũng sẽ muốn thêm giá trị đã nắm bắt vào cuối chuỗi biểu mẫu để hiển thị giá trị đó sau biểu mẫu
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
1Từ điển
$ gcloud --version
71 chứa bất kỳ dữ liệu nào được gửi với yêu cầu HTTP GET. Nếu URL cơ sở của bạn được gọi ban đầu mà không gửi biểu mẫu, thì từ điển sẽ trống và thay vào đó, bạn sẽ trả về một chuỗi trống làm giá trị mặc định. Nếu trang được gọi thông qua việc gửi biểu mẫu, thì từ điển sẽ chứa một giá trị bên dưới khóa $ gcloud --version
11 và bạn có thể tìm nạp thành công và thêm nó vào chuỗi được trả vềCung cấp cho nó một spin. Bây giờ bạn có thể nhập một số và thấy nó hiển thị ngay bên dưới nút của biểu mẫu. Nếu bạn nhập một số mới, thì số cũ sẽ được thay thế. Bạn đang gửi và nhận chính xác dữ liệu mà người dùng của bạn đang gửi
Trước khi bạn tiếp tục tích hợp giá trị đã gửi với mã chuyển đổi nhiệt độ của mình, bạn có thể nghĩ đến bất kỳ vấn đề tiềm ẩn nào khi triển khai này không?
Tập thể dục. Thực hành và khám pháHiển thị/Ẩn
Điều gì xảy ra khi bạn nhập một chuỗi thay vì một số?
Bây giờ hãy nhập mã HTML ngắn
$ gcloud --version
73 và nhấn Chuyển đổiHiện tại, ứng dụng web của bạn chấp nhận bất kỳ loại đầu vào nào, có thể là số, chuỗi hoặc thậm chí là mã HTML hoặc JavaScript. Điều này cực kỳ nguy hiểm vì người dùng của bạn có thể vô tình hoặc cố ý phá vỡ ứng dụng web của bạn bằng cách nhập các loại nội dung cụ thể
Hầu hết thời gian, bạn nên cho phép Flask tự động xử lý các vấn đề bảo mật này bằng cách sử dụng một thiết lập dự án khác. Tuy nhiên, bây giờ bạn đang ở trong tình huống này, vì vậy, bạn nên tìm hiểu cách bạn có thể làm cho biểu mẫu mà bạn đã tạo đầu vào an toàn theo cách thủ công
Thoát đầu vào của người dùng
Lấy thông tin đầu vào từ người dùng và hiển thị lại thông tin đầu vào đó mà không điều tra trước những gì bạn sắp hiển thị là một lỗ hổng bảo mật lớn. Ngay cả khi không có mục đích xấu, người dùng của bạn có thể làm những việc không mong muốn khiến ứng dụng của bạn bị hỏng
Cố gắng hack biểu mẫu nhập liệu chưa thoát của bạn bằng cách thêm một số văn bản HTML vào đó. Thay vì nhập số, hãy sao chép dòng mã HTML sau, dán vào hộp nhập liệu của bạn và nhấp vào Chuyển đổi
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
2Flask chèn văn bản trực tiếp vào mã HTML, điều này làm cho văn bản nhập này được hiểu là thẻ HTML. Do đó, trình duyệt của bạn hiển thị mã một cách nghiêm túc, giống như với bất kỳ mã HTML nào khác. Thay vì hiển thị lại đầu vào dưới dạng văn bản, bạn đột nhiên phải xử lý một liên kết spam giáo dục thời trang đã du hành thời gian đến đây ngay từ những năm 90
Mặc dù ví dụ này vô hại và biến mất khi bạn làm mới trang, nhưng bạn có thể tưởng tượng điều này có thể gây ra sự cố bảo mật như thế nào khi các loại nội dung khác được thêm vào theo cách này. Bạn không muốn mở ra khả năng người dùng của bạn chỉnh sửa các khía cạnh của ứng dụng web không được chỉnh sửa
Để tránh điều này, bạn có thể sử dụng Flask tích hợp sẵn để chuyển đổi các ký tự HTML đặc biệt
$ gcloud --version
75, $ gcloud --version
76 và $ gcloud --version
77 thành các biểu diễn tương đương có thể được hiển thị chính xácTrước tiên, bạn cần nhập
$ gcloud --version
78 vào tập lệnh Python của mình để sử dụng chức năng này. Sau đó, khi bạn gửi biểu mẫu, bạn có thể chuyển đổi bất kỳ ký tự HTML đặc biệt nào và làm cho biểu mẫu của bạn trở thành bằng chứng của tin tặc thập niên 90 1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
3Làm mới máy chủ phát triển của bạn và thử gửi một số mã HTML. Bây giờ nó sẽ được hiển thị lại cho bạn dưới dạng chuỗi văn bản mà bạn đã nhập
Ghi chú. Cần phải chuyển đổi chuỗi đã thoát trở lại Python
$ gcloud --version
79. Nếu không, Flask cũng sẽ tham lam chuyển đổi phần tử $ gcloud --version
28 mà hàm của bạn trả về thành các chuỗi thoátKhi xây dựng các ứng dụng web lớn hơn, bạn không cần phải xử lý thoát đầu vào của mình vì tất cả HTML sẽ được xử lý bằng các mẫu. Nếu bạn muốn tìm hiểu thêm về điều đó, hãy xem Flask by Example
Sau khi tìm hiểu cách thu thập dữ liệu đầu vào của người dùng và cả cách thoát dữ liệu đó, cuối cùng bạn đã sẵn sàng triển khai chức năng chuyển đổi nhiệt độ và hiển thị cho người dùng giá trị độ F tương đương với nhiệt độ độ C mà họ đã nhập
Xử lý đầu vào của người dùng
Vì cách tiếp cận này chỉ sử dụng một điểm cuối URL nên bạn không thể dựa vào Flask để nhập kiểm tra đầu vào của người dùng thông qua chụp thành phần đường dẫn URL như bạn đã làm trước đó trên. Điều này có nghĩa là bạn sẽ muốn giới thiệu lại khối
$ gcloud --version
24 … $ gcloud --version
25 của mình từ khối $ gcloud --version
00 ban đầu củaGhi chú. Vì bạn đang xác thực loại đầu vào của người dùng trong
$ gcloud --version
00, nên bạn không cần triển khai $ gcloud --version
85 và nó sẽ không phải là một phần trong mã cuối cùng của bạn. Bạn có thể xóa việc nhập $ gcloud --version
78 một cách an toàn và loại bỏ cuộc gọi tới $ gcloud --version
87 trở lại trạng thái ban đầuLần này,
$ gcloud --version
00 sẽ không được liên kết với một trang trí runtime: python38
1. Hãy tiếp tục và xóa dòng mã đó. Bạn sẽ gọi $ gcloud --version
00 một cách rõ ràng từ runtime: python38
4 thay vì yêu cầu Flask thực thi nó khi một điểm cuối URL cụ thể được truy cậpSau khi xóa bộ trang trí khỏi
$ gcloud --version
00 và giới thiệu lại khối $ gcloud --version
24 … $ gcloud --version
25, tiếp theo bạn sẽ thêm một câu lệnh có điều kiện vào runtime: python38
4 để kiểm tra xem đối tượng toàn cục $ gcloud --version
68 có chứa khóa $ gcloud --version
11 hay không. Nếu đúng như vậy, thì bạn muốn gọi $ gcloud --version
00 để tính độ Fahrenheit tương ứng. If it doesn’t, then you assign an empty string to the $ gcloud --version
99 variable insteadLàm điều này cho phép bạn thêm giá trị của
$ gcloud --version
99 vào cuối chuỗi HTML của bạn. Chuỗi rỗng sẽ không hiển thị trên trang của bạn, nhưng nếu người dùng đã gửi một giá trị thì giá trị đó sẽ hiển thị bên dưới biểu mẫuSau khi áp dụng những thay đổi cuối cùng này, bạn hoàn thành mã cho ứng dụng Flask chuyển đổi nhiệt độ của mình
1from flask import Flask
2
3app = Flask[__name__]
4
5@app.route["/"]
6def index[]:
7 return "Congratulations, it's a web app!"
4Vì đã có khá nhiều thay đổi, đây là phần đánh giá từng bước về các dòng đã chỉnh sửa
Dòng 2. Bạn không sử dụng
85 nữa, vì vậy bạn có thể xóa nó khỏi câu lệnh nhập$ gcloud --version
Dòng 8, 11 và 12. Như trước đây, bạn đang tìm nạp giá trị do người dùng gửi thông qua đối tượng toàn cầu
68 của Flask. Bằng cách sử dụng phương thức từ điển$ gcloud --version
03, bạn đảm bảo rằng một chuỗi rỗng sẽ được trả về nếu không tìm thấy khóa. Đó sẽ là trường hợp nếu trang được tải ban đầu và người dùng chưa gửi biểu mẫu. Điều này được thực hiện trong dòng 11 và 12app-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
Dòng 19. Bằng cách trả lại biểu mẫu với chuỗi trống mặc định được dán vào cuối, bạn tránh hiển thị bất kỳ thứ gì trước khi biểu mẫu được gửi
Dòng 9 và 10. Sau khi người dùng của bạn nhập một giá trị và nhấp vào Chuyển đổi, cùng một trang sẽ được tải lại. Khoảng thời gian này,
04 tìm khóaapp-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
11 và trả về giá trị liên quan. Điều này làm cho câu lệnh có điều kiện được đánh giá thành$ gcloud --version
06 và giá trị do người dùng cung cấp được chuyển thànhapp-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
00$ gcloud --version
Dòng 24 đến 29.
00 kiểm tra xem người dùng có cung cấp thông tin đầu vào hợp lệ hay không. Nếu giá trị được cung cấp có thể được chuyển đổi thành$ gcloud --version
09, thì hàm sẽ áp dụng mã chuyển đổi nhiệt độ và trả về nhiệt độ tính bằng độ F. Nếu nó không thể được chuyển đổi, thì a được nâng lên và thay vào đó, hàm trả về chuỗiapp-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
11app-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
Dòng 19. Lần này, khi bạn nối biến
99 vào cuối chuỗi HTML, nó trỏ đến giá trị trả về là$ gcloud --version
00. Điều này có nghĩa là nhiệt độ đã chuyển đổi hoặc chuỗi thông báo lỗi sẽ được thêm vào HTML của bạn$ gcloud --version
Dòng 15 và 18. Để làm cho trang dễ sử dụng hơn, bạn cũng thêm các nhãn mô tả
14 vàapp-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
15 vào cùng chuỗi HTML nàyapp-engine-python 1.9.91 bq 2.0.62 cloud-datastore-emulator 2.1.0 core 2020.11.13 gsutil 4.55
Trang của bạn sẽ hiển thị chính xác mặc dù cách bạn thêm các chuỗi này không thể hiện HTML hợp lệ. Điều này hoạt động nhờ vào sức mạnh của các trình duyệt hiện đại
Hãy nhớ rằng nếu bạn quan tâm đến việc tìm hiểu sâu hơn về phát triển web, thì bạn sẽ cần học HTML. Nhưng để triển khai tập lệnh Python của bạn trực tuyến, điều này sẽ hoạt động tốt
Giờ đây, bạn có thể sử dụng tập lệnh chuyển đổi nhiệt độ bên trong trình duyệt của mình. Bạn có thể cung cấp nhiệt độ độ C thông qua hộp nhập liệu, nhấp vào nút và xem kết quả độ F đã chuyển đổi xuất hiện trên cùng một trang web. Vì bạn đang sử dụng yêu cầu HTTP GET mặc định nên bạn cũng có thể thấy dữ liệu đã gửi xuất hiện trong URL
Ghi chú. Trên thực tế, bạn thậm chí có thể bỏ qua biểu mẫu và cung cấp giá trị của riêng mình cho
$ gcloud --version
11 bằng cách cung cấp một địa chỉ thích hợp, tương tự như cách bạn có thể sử dụng chuyển đổi khi tạo tập lệnh mà không có biểu mẫu HTMLVí dụ: hãy thử nhập trực tiếp URL
app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
17 vào trình duyệt của bạn và bạn sẽ thấy kết quả chuyển đổi nhiệt độ xuất hiện trên trang của mìnhTriển khai lại ứng dụng đã hoàn thành của bạn lên Google App Engine bằng cách sử dụng lệnh
if __name__ == "__main__":
app.run[host="127.0.0.1", port=8080, debug=True]
8. Sau khi triển khai xong, hãy truy cập URL được cung cấp hoặc chạy if __name__ == "__main__":
app.run[host="127.0.0.1", port=8080, debug=True]
5 để xem ứng dụng web Python của bạn trực tuyến trên Internet. Kiểm tra nó bằng cách thêm các loại đầu vào khác nhau. Khi bạn hài lòng, hãy chia sẻ liên kết của bạn với mọi ngườiTập thể dục. Thực hành và khám pháHiển thị/Ẩn
URL của ứng dụng web bộ chuyển đổi nhiệt độ của bạn vẫn trông giống như
app-engine-python 1.9.91
bq 2.0.62
cloud-datastore-emulator 2.1.0
core 2020.11.13
gsutil 4.55
20. Điều này không phản ánh chức năng hiện tại của ứng dụng của bạnTruy cập lại , tạo dự án mới trên Google App Engine với tên phù hợp hơn và triển khai ứng dụng của bạn ở đó. Điều này sẽ cung cấp cho bạn thực hành trong việc tạo dự án và triển khai các ứng dụng Flask của bạn cho Google App Engine
Tại thời điểm này, bạn đã chuyển đổi thành công tập lệnh Python của mình thành ứng dụng web Python và triển khai nó vào Google App Engine để lưu trữ trực tuyến. Bạn có thể sử dụng quy trình tương tự để chuyển đổi nhiều tập lệnh Python của mình thành ứng dụng web
Tập thể dục. Thực hành và khám pháHiển thị/Ẩn
Tạo trình tạo thơ của riêng bạn cho phép người dùng tạo các bài thơ ngắn bằng biểu mẫu web. Ứng dụng web của bạn nên sử dụng một trang với một biểu mẫu duy nhất chấp nhận các yêu cầu GET. Bạn có thể sử dụng mã ví dụ này để bắt đầu hoặc bạn có thể viết mã của riêng mình
Nếu muốn tìm hiểu thêm về những gì bạn có thể làm với Google App Engine, thì bạn có thể đọc về cách sử dụng tệp tĩnh và thêm tệp CSS vào ứng dụng web Python của mình để cải thiện giao diện tổng thể của ứng dụng
Lưu trữ mã của bạn trực tuyến có thể giúp nhiều người truy cập mã hơn qua Internet. Hãy tiếp tục và chuyển đổi các tập lệnh yêu thích của bạn thành các ứng dụng Flask và hiển thị chúng cho cả thế giới
Phần kết luận
Bạn đã bao phủ rất nhiều nền tảng trong hướng dẫn này. Bạn đã bắt đầu với một tập lệnh Python cục bộ và biến nó thành một ứng dụng Flask được triển khai đầy đủ, thân thiện với người dùng hiện được lưu trữ trên Google App Engine
Trong khi làm việc thông qua hướng dẫn này, bạn đã học được
- Cách các ứng dụng web cung cấp dữ liệu qua Internet
- Cách cấu trúc lại tập lệnh Python của bạn để bạn có thể lưu trữ tập lệnh trực tuyến
- Cách tạo một ứng dụng Flask cơ bản
- Cách thoát thủ công đầu vào của người dùng
- Cách triển khai mã của bạn tới Google App Engine
Giờ đây, bạn có thể lấy các tập lệnh Python cục bộ của mình và cung cấp chúng trực tuyến cho toàn thế giới sử dụng. Nếu bạn muốn tải xuống mã hoàn chỉnh cho ứng dụng mà bạn đã tạo trong hướng dẫn này, thì bạn có thể nhấp vào liên kết bên dưới
Nhận mã mẫu. Nhấp vào đây để lấy mã mẫu mà bạn sẽ sử dụng để tìm hiểu về cách tạo ứng dụng web Python bằng Flask trong hướng dẫn này
Nếu bạn muốn tìm hiểu thêm về phát triển web với Python, thì giờ đây bạn đã được trang bị đầy đủ để thử nghiệm với các khung web Python như Flask và Django. Hãy tiếp tục phát huy
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Triển khai tập lệnh Python của bạn trên web bằng Flask
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
About Martin Breuss
Martin thích tự động hóa, trò đùa ngớ ngẩn và rắn, tất cả đều phù hợp với cộng đồng Python. Anh ấy thích học hỏi và khám phá và cũng sẵn sàng nói về nó. Anh ấy viết và ghi nội dung cho Real Python và CodingNomads
» Thông tin thêm về MartinMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Bartosz
Geir Arne
Joanna
Gia-cốp
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi