Flask'ta bina görünümleri

Önerdiği kalkınma modeli veya paradigması içinde şişeEn önemli noktalardan biri, görünümlerin yönetimidir, çünkü bunlar, kullanıcının sayfamız veya uygulamamızla nasıl etkileşime gireceğini tanımlamamıza izin verir.

Bir görünümle çalışmanın en basit yolu, işlemi doğrudan yolunun tanımında tanımlamaktır, ancak bu, özellikle büyük uygulamalar oluşturduğumuzda her zaman yararlı veya yeterli değildir.

Gereksinimlerİşlevsel bir kuruluma ihtiyacımız var şişe ve uyumluluk nedenleriyle, sürümden daha yüksek bir sürüme ihtiyacımız var 0.7 çünkü çalışacağımız bileşenlerden biri, söz konusu sürümden sonra çerçeveye dahil edilmedi. Ayrıca bir uygulama başlatmamız veya bazı uygulamalarımız olması gerekiyor. şişe böylece örnekleri görünümler bölümüne dahil edebiliriz ve böylece bunları tarayıcı ile çalıştırabiliriz.

Rol tabanlı görünümler


Kullanıcı ile etkileşim kurmanın en basit yollarından biridir, sadece bir fonksiyon yazmamız ve onu rota ile dekore etmemiz yeterlidir, bu, yönlendirici olduğunda yapar. şişe isteği alır, söz konusu rotayı bekleyen bir fonksiyon olup olmadığını kontrol eder ve ardından alırsa yürütür.

Genellikle bu tür görüşler, en azından yöntemi gerektirir. ELDE ETMEK nın-nin HTTPAncak iyi bir uygulama olarak ve güvenlik nedenleriyle veri kalıcılık yapımıza değer katmak istiyorsak yöntemi de kullanabiliriz. İLETİ.

GET ile bir görünüm oluşturma


Yöntemi kullanarak bir görünüm oluşturacağız. ELDE ETMEKBunu yapmak için bir fonksiyonda ismini tanımlamanız ve ona bir rota atamanız yeterlidir, daha sonra fonksiyonun içine içeriğimizi yerleştireceğiz, kendimizi göstermek için aşağıdaki kodu görelim.
 @ app.route ('/ view-get') def view (): değer = request.args.get ('content', 'sample') return 'Bu, GET kullanan bir görünümdür ve bir değer alır:% s'% değer
Kodda o zaman nasıl kullandığımızı görüyoruz. dekoratör Hangi rotayı beklediğimizi belirtmek için ilgili fonksiyonu tanımlıyoruz ve bunun içinde ile bir çağrı yapıyoruz. rica etmek tarafından alınan argümanlara ELDE ETMEK, bu durumda içerik adlı bir argüman ararız ve onu değer adlı bir değişkene atarız, bu argüman yoksa, "örnek" varsayılan değer olarak yerleştirilir ve son olarak bir metin döndürür ve değerin içeriğini iletiriz .

Örneğimizi tarayıcıda çalıştırırsak aşağıdakileri alırız:

POST ile bir görünüm oluşturma


İstediğimiz hassas verileri almaksa ve URL'deki parametrelerden geçirmek istemiyorsak ne olur, çünkü bu durumlarda POST yöntemini kullanmalıyız, çünkü kullanıcının görünümünden gizlenmiş verileri gönderir, elbette orada. kullanmamız gereken diğer güvenlik önlemleridir ancak şu anda bu durumda onlara ihtiyacımız yok.

POST ile veri alan bir görünüm oluşturmak için, yalnızca beklenen yöntemi belirtmeniz gerekir. dekoratör İstediğimiz rotayı alan, bunun için ek parametreyi kullanıyoruz yöntemler.

Sonra fonksiyonumuz içinde kullanabiliriz rica etmek Ancak değerleri elde etmek için önceki örnekten farklı olarak argümanları zorunlu kılmak yerine değerleri bir formdan aldığımızı belirtmeliyiz. Şimdi biraz önce açıkladığımız şeyin koduna bakalım.

 @ app.route ('/ görünüm sonrası', yöntemler = ['POST',]) def post_view (): değer = request.form.get ('içerik', 'örnek') dönüş 'Bu, POST kullanan bir görünümdür ve bir değer alır:% s'% değeri
Bahsettiğimiz farklar dışında hemen hemen yukarıdakiyle aynı kod olduğunu fark edebiliriz ancak kodumuzu doğrudan tarayıcımızda çalıştırırsak ne olacağını görelim:

BÜYÜT

Yalnızca yöntemi alabileceğimizi nasıl belirtebiliriz? İLETİ, üzerinden erişirken ELDE ETMEK uygulamamız girişi reddeder ve bu nedenle bize bir kod gönderir 405 Yönteme izin verilmez, bu nedenle bir POST isteğinden gelen değerler olmadan bu görünüm herhangi bir bilgi göstermez.

Görünümde GET ve POST'u birleştirme


Her yöntem için farklı görünümleri işlemek her zaman istediğimiz şey olmadığından, her iki yöntemi de aynı görünümde kullanabiliriz, bu özellikle formları örneğin yöntemle işlemek istediğimizde çok kullanışlıdır. ELDE ETMEK formu gösteriyoruz ve İLETİ Aynı gönderiyi işliyoruz.

Bu modu kullanmak için sadece eklememiz gerekiyor ELDE ETMEK geçtiğimiz listede yöntemler tanımlarken dekoratör path ile aşağıdaki kodu görelim:

 @ app.route ('/ görünüm', yöntemler = ['GET', 'POST',]) def görünümü (): if request.method == "GET": dönüş '' 'Görünümleri Göster''' başka: değer = request.form.get ('içerik', 'örnek') return 'Bu, bir değer alan GET ve POST kullanan bir görünümdür:% s'% değeri
Yöntemle tarayıcıdan rotayı çağırırken ELDE ETMEK aşağıdakileri elde ederiz:

Daha sonra metin alanına bir şeyler yazıp Enter'a basarak formu aynı yola gönderiyoruz ancak yöntem ile İLETİ, bu bize aşağıdaki gibi bir sonuç verir:

Burada, her iki yöntemi de kullanmamıza ve bunlardan yararlanmamıza izin veren gerçek bir işlev tabanlı görünüm yazdık. HTTP işlemlerimizi yapmak.

Sınıf tabanlı görünümler


İşlevlerin yaratılması, amaçlarımıza hizmet etseler bile bazen çok hantal olduğundan ve gereğinden fazla koda sahip olmaya müsait olduğundan, şişe çağrıları uyguladı sınıf tabanlı görünümler, ödünç aldığı bir kavram Django, ve bu, kendileriyle görünüm oluşturacağımız sınıflar yazmamıza izin verir, bu sınıflar istersek kalıtım yapabileceğimiz genel olabilir.

Bu tür bir bileşeni kullanmak için önce şuradan içe aktarmalıyız: şişe.görünümler, sınıf nerede Görünüm Rotaları gönderebilmek ve yöntemleri tanımlayabilmek için temel işlevleri eklememize izin verecek genel bir sınıftır.

Sınıf tabanlı görünümümüzü oluşturma


Bu örnekte, önceki örnekte yaptığımız görünümün aynısını ancak sınıf tabanlı bir yaklaşımdan oluşturacağız, bu şekilde her iki form arasındaki farkları belirleyebiliriz, unutmayın ki örnek kodda görünmese de, biz yaptık içe aktarmak Görünüm sınıfından.

Örneğimiz için koda bakalım:

 class ViewClass (Görünüm): yöntemler = ['GET', 'POST',] def sevk_request (self): if request.method == "GET": '' 'Görünümleri Göster''' if request.method == " döndür POST ": değer = request.form.get ('içerik', 'örnek') dönüş 'Bu, bir değer alan GET ve POST kullanan bir görünümdür:% s'% valorapp.add_url_rule ('/ görünüm sınıfı', görünüm_func = VistaClase.as_view ('görünüm sınıfı'))
Bu, bu görüş tarzının en temel biçimidir, ancak artık vizyona bağlı olmadığımızı görüyoruz. dekoratör, yaptığımız şey yöntemi aramak sevk_talebi ve onu geçtik öz bununla aynı nesneyi alması için aldığımız istekleri belirleyebiliriz, ardından her iki yöntemi de alacağımızı belirtiyoruz ve son olarak davranışlarımızı tanımlıyoruz, tarayıcı başına sonuç bir öncekiyle aynı olacak, bir alan ve gönderdiğimizde belirtilen yanıtı alacağız.

Peki ya daha temiz kod yazmak istiyorsak? Bunun için class'ı kullanabiliriz. Yöntem Görünümü nın-nin şişe bu, yöntemleri tanımlamak için sınıf içinde yöntemler oluşturmamıza izin verir. HTTP daha basit bir şekilde.

Bu modu kullanmak için önceki kodu yeniden yazdığımız aşağıdaki örneğe bakalım:

 class ViewClass (MethodView): def get (self): return '' 'Views Show''' 'def post (self): value = request.form.get (' içerik ',' örnek ') dönüş' Bu, şunu kullanan bir görünümdür Bir değer alan GET ve POST:% s'% valorapp.add_url_rule ('/ view-class', view_func = ViewClass.as_view ('view-class'))
Gördüğümüz gibi, alacağımız yöntemlerin tanımından vazgeçtik, ayrıca artık yöntemi kullanmıyoruz. sevk etmek, biz sadece yöntemde ne yapacağımızı tanımlarız İLETİve GET'te ne yapacağımızı, böylece görüşümüze çok daha fazla temizlik kazandıracağız.

Daha iyi olup olmadığı konusunda hala bir tartışma var. rol tabanlı görünümler dalgalar sınıf temelli, ama gerçekten biri diğerinden daha iyi değil, çalışmanın sadece iki yolu var, öneri şu ki eğer görünüm çok basitse bunu fonksiyonlarla yapabiliriz ve zaten daha eksiksiz bir mantığı varsa bunu sınıflarla yaparız .

Bununla, görünümlerin nasıl çalıştığını ve farklı yöntemlerle nasıl çalışabileceğimizi bilerek önemli bir temel oluşturduğumuz bu öğreticiyi bitirdik. HTTP, çünkü daha gelişmiş uygulamalar oluşturmak için kullanabileceğimiz temel budur.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave