Làm cách nào để lấy dữ liệu html trong bình?
Nhưng đừng băn khoăn, chúng ta chưa xong đâu. Chúng tôi vẫn còn ít nhất một. một công cụ tạo khuôn mẫu có tên là Jinja, để giúp chúng tôi thêm dữ liệu từ cơ sở dữ liệu vào trang web của chúng tôi Show Ngay bây giờ khi chúng tôi gọi 8, tất cả những gì chúng tôi cung cấp cho nó là tên của mẫu. Nếu chúng tôi loại bỏ thực hành ORM, lộ trình 0 của chúng tôi trông khá đơn giản
Hóa ra chúng ta có thể nâng cấp mọi thứ bằng cách gửi thông tin bổ sung đến mẫu. Giả sử chúng ta muốn gửi số lượng trường đến trang web và chúng ta đoán đó là khoảng 900 trường. Chúng ta có thể điều chỉnh cuộc gọi 8 như thế này
2 chỉ là một tên biến mới, nó có thể là bất cứ thứ gì. 3, 4, bạn có thể chọn bất kỳ tên biến nào trong đó và bạn sẽ ổn thôi. Bằng cách đếm 5 với 8, chúng tôi đang gửi một biến có tên là 2 tới mẫuBây giờ chúng ta chỉ cần tìm ra cách sử dụng nó Hãy quay lại mẫu - 8 - và chỉnh sửa một chút 2Làm mới trang và ngạc nhiên 9 cực kỳ giả tạo và giả tạo đó đã đi từ khía cạnh Python của mọi thứ sang khía cạnh HTML của mọi thứ mà không gặp quá nhiều khó khănThứ 40 đó không phải là HTML. Trước khi Flask gửi trang web tới trình duyệt của bạn, nó sẽ duyệt qua trang và tìm những thứ như 40 và điền tên biến vào đóĐây là một ngôn ngữ khuôn mẫu gọi là Jinja2. Nó có thể làm được nhiều việc hơn là điền vào chỗ trống, bao gồm các vòng lặp và tất cả các loại nội dung. Nó siêu hữu ích và là sự kết hợp kỳ lạ giữa không đau và đau. Bạn sẽ thích nó Dấu ngoặc kép - 42 - khá phổ biến trên các ngôn ngữ tạo khuôn mẫu khác nhau. Đôi khi bạn có thể nghe chúng được gọi là “ria mép”, nhờ có ria mép. js và các thanh điều khiển sau này. js. Chúng có thể trông giống với Jinja2, nhưng đừng để bị phân tâm. Chỉ cần nghĩ rằng "ôi ria mép chắc chắn ổn" và tiếp tục với cuộc sốngCon số 90 giả này đang giết chết tôi, vì vậy hãy điều chỉnh 43 của chúng tôi để gửi số trường thực tế. Tôi sẽ phớt lờ một cách tàn nhẫn các tuyên bố của 44 mà chúng tôi đã thêm trước đây (vui lòng nhận xét chúng. )
Đẹp. Tuyệt vời. Không thể tin được Bạn có thể muốn thực hiện truy vấn ORM bên trong 8, như thế này
Trong khi điều này hoạt động, nó có vẻ hơi lộn xộn với tôi. Việc lưu số đếm dưới dạng một biến khác sẽ không giết chết bất kỳ ai (tôi không nghĩ vậy) và nó có khả năng tổ chức tốt hơn nếu bạn gửi nhiều biến hơn vào mẫu Trong khi “1640” khá xấu, “1.640” trông chắc chắn hơn một chút. Nếu chúng tôi muốn thêm dấu phẩy, chúng tôi có thể thực hiện theo một trong hai cách sau. Cách thứ hai có lẽ tốt hơn, nhưng cách thứ nhất sử dụng chuỗi f. Khủng hoảng, khủng hoảng Ở cách thứ nhất, chúng ta thêm dấu phẩy trước nó vào mẫu 4Vì vậy, thay vì gửi số đếm thực tế tới mẫu, chúng tôi sẽ gửi phiên bản đẹp, có dấu phẩy. Nếu chúng ta đang làm toán theo khuôn mẫu thì đó là một ý tưởng tồi, nhưng… có lẽ nếu không thì cũng ổn thôi? Một tùy chọn khác là thực hiện định dạng trong mẫu. Vì Jinja là một thứ của Python, nên bạn có thể làm những thứ Python bên trong 42………ngoại trừ chuỗi f. Nếu chúng tôi muốn sử dụng định dạng chuỗi của Python, chúng tôi cần thực hiện với kiểu cũ hơn một chút 4Đây có lẽ là cách tốt hơn, vì bạn đang giữ nguyên các quy tắc định dạng cho đến chính xác khi bạn định dạng nó. Tuy nhiên, nếu bạn yêu thích f-string đến chết, nó có thể khiến bạn đau tim, vì vậy tôi nghĩ rằng tôi sẽ cho bạn một lựa chọn khác Việc gửi một số nguyên duy nhất đến mẫu của chúng tôi khá dễ dàng, nhưng việc gửi cả đống thứ cũng vậy. Hãy gửi những trường mà chúng tôi đã tìm thấy, những trường từ mã ZIP 10466 5Việc thêm 47 sẽ gửi một biến khác vào mẫu của chúng tôi. Trong mẫu, biến sẽ được gọi là 48, nhưng nó sẽ có nội dung của biến 49. Bây giờ tất cả những gì chúng ta cần làm là hiển thị chúngTrong thế giới HTML, việc in chúng hơi khác so với khi chúng tôi thực hiện 40. Bởi vì có bội số, chúng ta cần một vòng lặp. Các vòng lặp trong Jinja2 khác một cách hợp lý so với Python, nhưng bạn sẽ nắm được ý chính. Chúng tôi sẽ đặt những thứ này xuống gần cuối, thay thế Nhìn vào thứ này 0Làm mới, và bạn nên đi. Nếu không, hãy đảm bảo rằng bạn khớp các tên biến - 47 và 42. Đồng thời kiểm tra xem bạn đã sử dụng 43 thay vì 44Theo cách tương tự mà trong 43, chúng tôi đã sử dụng trường học. SCHOOLNAME 46SCHOOLNAME 47render_template` bạn có thể tự do sử dụng ở khía cạnh HTML của mọi thứ
Quay trở lại thời kỳ lịch sử khi lần đầu tiên chúng ta nói về ứng dụng web, chúng ta đã mô tả chúng như thế này
Khi bạn có những trang này - chúng tôi sẽ gọi chúng là các trang "hiển thị" hoặc "chi tiết" - chúng cần phải tồn tại ở một URL cụ thể. Nếu 49 có danh sách các bang, bạn có thể nhấp vào một danh sách để được gửi đến trang chi tiết của từng bang tại một trong các địa chỉ sau
Phần nhỏ ở cuối - 54 hoặc 55 hoặc 56, v.v. - được gọi là id hoặc sên. Nói một cách thực tế, sên là cách ứng dụng web tìm thấy trạng thái mà bạn quan tâm từ cơ sở dữ liệuChúng tôi có một số tùy chọn về những gì chúng tôi có thể sử dụng cho một con sên, nó chỉ cần là thứ gì đó duy nhất cho mỗi hàng trong tập dữ liệu của chúng tôi. Ví dụ, mỗi trường có một tên khác nhau. Nhưng nếu chúng tôi sử dụng tên trường học làm con sên, chúng tôi sẽ kết thúc với 7trông không thực sự chuyên nghiệp. Một cách dễ dàng là sử dụng bất cứ thứ gì mà 57 có trong cơ sở dữ liệu của bạn - nó được đảm bảo là duy nhất, vì vậy mỗi hàng trong cơ sở dữ liệu của bạn có một hàng riêng biệt. Nó có thể không phải là hấp dẫn nhất, nhưng nó dễ dàngTrong trường hợp của chúng tôi, chúng tôi đặt 58 ở dòng cuối cùng của mô hình của chúng tôi 0Nào, 59. Vì vậy, trường Riverdale mà chúng tôi đã đề cập ở trên sẽ được tìm thấy tại 1Cái nào đẹp hơn nhiều
Để xây dựng trang chi tiết của chúng tôi, chúng tôi cần một tuyến đường mới. Đây sẽ là một lộ trình đặc biệt, vì phần cuối của URL có thể thay đổi - 01 là Riverdale, nhưng 02 là Public School 068. Để thực hiện điều này, chúng tôi thêm một biến vào tuyến đường của chúng tôi 2Bây giờ bất cứ điều gì có thể làm vào phần sau 03. Nếu chúng ta muốn tìm P. S. 68, chúng tôi sẽ kiểm tra http. //máy chủ cục bộ. 5000/trường học/X068. Và nó hoạt độngNếu chúng ta muốn đi từng dòng một, chúng ta sẽ bắt đầu với lộ trình. Bất kỳ biến nào trong URL - và bạn có thể có một triệu. - được bao quanh bởi các dấu ngoặc nhọn. Các dấu ngoặc này không hiển thị trong URL, chúng chỉ có nghĩa là “sẽ có thứ khác ở đó. ” 3Khi chúng tôi tạo chức năng của mình, trước đây chúng tôi luôn sử dụng 04, nhưng bây giờ biến của chúng tôi hiển thị trong ngoặc đơn 4Sau đó, chúng tôi sử dụng con sên đó để lọc qua các trường (chẳng hạn như 05) và lấy kết quả đầu tiênBởi vì chúng tôi đã sử dụng 06 SQLAlchemy cung cấp cho chúng tôi một hàng mà chúng tôi có thể làm những việc như 07 trên đó. Thay vào đó, nếu chúng tôi yêu cầu 08, chúng tôi sẽ có một danh sách mà chúng tôi cần lặp lại (ngay cả khi chỉ có một kết quả. ) 5Chúng tôi đã sử dụng 09 để in tên trường lên trang web, nhưng giờ đã đến lúc nâng cấp lên trang chi tiết chính thứcTrước khi chúng tôi tạo trang chi tiết thực tế của mình, hãy viết mã để sử dụng mẫu. Hơi ngược, nhưng cứ làm đi Thay vì sử dụng 09 chỉ với 71, chúng tôi sẽ yêu cầu nó gửi một mẫu mới. Chúng tôi sẽ gọi mẫu này là 72 và gửi trường mà chúng tôi tìm thấy trong cơ sở dữ liệu, giống như chúng tôi đã gửi số lượng trường cho mẫu khác 6Chúng tôi đang thiếu 72, nhưng chúng tôi có thể khắc phục điều đó. Tạo một tệp mới có tên là 72 và dán đoạn mã sau vào đó 7Nhìn kìa. Chúng ta chỉ có thể sử dụng `{{ trường học. column_name }}`` ở bất kỳ đâu trên trang để điền thông tin chi tiết về trường học Nhưng… bản thân văn bản hơi xấu, vì 75 có vẻ hơi QUÁ MUỐN Hét lên theo sở thích của tôi. Tuy nhiên, vì mẫu Jinja2 của chúng tôi dựa trên Python, nên một giải pháp không còn xa nữaGiống như chúng ta có thể thực hiện 76 và 77 trên một chuỗi để biến nó thành 78 hoặc 79, Python có một trình thao tác chuỗi thú vị khác có tên là 00. Hãy thay đổi phần địa chỉ của chúng tôi để trông như thế này 8Bạn thậm chí có thể thay đổi 71 theo cách tương tự. Bây giờ nó trông đẹpNgay bây giờ, bạn cần biết URL cụ thể của trường để kết thúc trên trang chi tiết. Nhưng ai có thời gian cho việc đó?. Tôi nghĩ rằng trang chủ của chúng tôi - tuyến đường 0 của chúng tôi - nên liệt kê tất cả các trường và cũng bao gồm các liên kết đến từng trang chi tiết của họ. Nó đủ dễ dàngMột liên kết trong HTML trông như thế này 9Hay đúng hơn, một loạt các liên kết trong một loạt các thẻ paragaph. Ngay bây giờ nếu bạn nhìn vào 03, chúng tôi đang liệt kê các trường của chúng tôi theo cách gần như tương tự 20Nếu chúng tôi muốn thay đổi điều này thành các liên kết, chúng tôi cần điền vào chỗ trống với 04, giống như chúng tôi đã làm với tên của trường 21Thuộc tính 05 hiện thay đổi dựa trên trường bạn đang xem. Làm mới trang và xem tất cả các liên kết ngọt ngào đó. Nhấp vào bất kỳ trường nào và bạn sẽ có thể chuyển qua lại giữa danh sách trường và trang chi tiết trườngNhưng ôi, đợi đã. Đây chỉ là các trường trong một mã ZIP nhất định. Nếu bạn muốn biến nó thành tất cả các trường, bạn cần mở 43 và thay đổi một chút mã. Bên trong 04, chúng tôi đang tìm ra những trường học như thế này 22Thay vào đó, khi chúng ta nên làm một cái gì đó như thế này 23Và, vâng, gọi nó là 49 không còn ý nghĩa gì nữa, vì vậy hãy đổi tên biến của chúng ta thành đơn giản là 48 24Tuy nhiên, đó là một trang web LỚN mà chúng tôi có bây giờ. Sẽ có ý nghĩa hơn nếu chúng tôi có một vài trang web nhỏ hơn, những trang mà bạn có thể tìm thấy danh sách các trường học ở một quận/thành phố hoặc mã zip cụ thể (…mà chúng tôi vừa loại bỏ) Nếu chúng ta nhìn vào tập dữ liệu, cột 10 có vẻ là một nơi tốt để bắt đầu. Hãy xây dựng một tuyến đường mới có tên là 10 để mọi người có thể duyệt đến 12 và xem tất cả các trường ở Bronx (mặc dù hiện tại chúng tôi sẽ chỉ in số trường thay vì hiển thị danh sách) 25Hãy xem qua http. //máy chủ cục bộ. 5000/thành phố/BRONX và ngạc nhiên
Tôi… không thích URL đó. Chúng tôi thà có 13 thay vì 12, phải không? . Vì vậy, nếu bạn gõ 15 hoặc 16 hoặc 17 hoặc bất cứ thứ gì thì nó sẽ luôn được dịch thành 18 khi bạn tìm kiếm 26Đang xem http. //máy chủ cục bộ. 5000/thành phố/bronx là một trải nghiệm tuyệt vời hơn, phải không? Bây giờ chúng tôi muốn hiển thị danh sách các trường, bạn có thể nghĩ rằng đã đến lúc chúng tôi tạo một mẫu khác. Nhưng nếu… chúng ta không cần làm điều đó thì sao? Thông thường, bạn có một số mẫu và sử dụng lại chúng theo các tuyến khác nhau (hoặc “chế độ xem”). Hiển thị tất cả các trường trong một mã zip cụ thể và tất cả các trường trong một thành phố cụ thể và tất cả các trường nói chung thực tế là giống nhau, đó chỉ là một danh sách các trường Hiện tại, mẫu 03 của chúng tôi lấy một biến có tên là 48 và hiển thị tất cả chúng. Điều gì sẽ xảy ra nếu chúng ta chỉ gửi các trường học cho thành phố này theo mẫu đó? 27Một sai lầm khủng khiếp. Chúng tôi đã không chuyển cho nó một biến 21, vì vậy khi chúng tôi cố gắng thực hiện đoạn mã này 28nó hoảng sợ và hoảng loạn và tắt máy. Một cách khắc phục dễ dàng là điều chỉnh tuyến đường thành phố của chúng ta để gửi số lượng trường học đến mẫu - chúng ta không cần thực hiện 22 hay bất cứ điều gì, chúng ta chỉ cần sử dụng một 23 đơn giản 29hoan hô. Tốt hơn một chút, ngoại trừ http. //máy chủ cục bộ. 5000/city/brox lượt đọc Có 392 trường học ở thành phố New York. , khi chúng tôi chắc chắn chỉ đang cố gắng nhìn vào Bronx Chúng tôi không cần một mẫu hoàn toàn mới cho điều đó - chúng tôi chỉ cần điều chỉnh từng mẫu để in ra nơi chúng tôi đang tìm kiếm và thay đổi chế độ xem của chúng tôi để gửi dữ liệu đó. Hãy gọi nó là 24, và chỉ để nó là tên thành phố 0Chúng tôi sẽ thực hiện một điều chỉnh nhỏ trong 03 của mình để sử dụng biến mới 1và chúng tôi hiện có Có 392 trường học ở Bronx trên đầu trang của chúng tôi. Nó cũng hoạt động cho Manhattan và Brooklyn. Tuy nhiên, liên kết Đảo Staten là 26, thật thô thiển và xấu xí. Sửa chữa nhỏ của chúng tôi sẽ là một bước bổ sung ngoài 76 trên thành phố của chúng tôi trước khi chúng tôi tìm kiếm trong cơ sở dữ liệu - chúng tôi cũng sẽ thay thế tất cả 28 bằng dấu cách
2Sắc đẹp. Thành công
Và những gì về một tuyến đường cho mã zip? . CHÚNG TÔI sẽ chỉ tạo một tuyến đường có tên là 36 và thực hiện chính xác điều tương tự - cùng một mẫu, chỉ với một bộ lọc khác 3Nhìn kìa. Tất cả sáu giây để có được một cách hoàn toàn mới để duyệt qua các trường học Trước khi tiếp tục, có một điều nhỏ mà chúng tôi cần khắc phục - lộ trình gốc của chúng tôi. Nếu bạn truy cập trang chủ của chúng tôi http. //máy chủ cục bộ. 5000/ chúng tôi nhận được một lỗi lớn 'vị trí' không xác định' Điều này là do chúng tôi đã không gửi một vị trí từ tuyến gốc của mình, vì vậy mẫu sẽ hoảng loạn khi nhìn thấy cụm từ 37 của chúng tôi 43 hiện trông như thế này 4Nếu chúng tôi không có biến mà chúng tôi đang chuyển vào, làm cách nào để chúng tôi nhận được một 24 để cung cấp cho mẫu của mình? . Thay vì 40, chúng ta chỉ cần nói 41 và nó hoạt động tốt
Làm cách nào để lấy dữ liệu biểu mẫu HTML bằng Python?Để đăng dữ liệu biểu mẫu HTML lên máy chủ ở định dạng được mã hóa URL bằng Python, bạn cần phải thực hiện yêu cầu HTTP POST tới máy chủ và cung cấp dữ liệu biểu mẫu HTML trong phần thân . Bạn cũng cần chỉ định loại dữ liệu bằng cách sử dụng Content-Type. tiêu đề yêu cầu ứng dụng/x-www-form-urlencoded. . You also need to specify the data type using the Content-Type: application/x-www-form-urlencoded request header.
Làm cách nào để gửi dữ liệu HTML tới Flask mà không cần biểu mẫu?stringify(layout) sau đó vào. chính. py , thay thế layout = data bằng layout = request. args. lấy('dữ liệu') .
Flask hoạt động như thế nào với HTML?Flask cung cấp hàm trợ giúp render_template() cho phép sử dụng công cụ tạo mẫu Jinja . Điều này sẽ làm cho việc quản lý HTML dễ dàng hơn nhiều bằng cách viết mã HTML của bạn vào. html cũng như sử dụng logic trong mã HTML của bạn. |