English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
myapp/forms.py
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 #-*- coding: utf-8 -*- من django وارد فئة LoginForm(forms.Form): user = forms.CharField(max_length = 100) password = forms.CharField(widget = forms.PasswordInput())
من خلال ما سبق، يمكن استخدام معامل "widget" لتحويل نوع الحقل إلى HTML; في مثالنا، نريد إخفاء كلمة المرور وليس عرضها. في مثالنا، نريد إخفاء كلمة المرور دون عرضها. مدخل التاريخ هو DateInput، وCheckboxInput هو مربع اختيار، وما إلى ذلك.
استخدام النموذج في الرؤية
هناك نوعان من الطلبات HTTP، وهي GET وPOST. في Django، لديك خاصية تُدعى "method" في كائن الطلب للرؤية، حيث يتم تعيين نوع الطلب، ويمكن الوصول إلى جميع البيانات المرسلة عبر POST عبر دictionnary request.POST.
دعونا نخلق رؤية الloguein في myapp/views.py -
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 #-*- coding: utf-8 -*- from myapp.forms import LoginForm def login(request): username = "not logged in" if request.method == "POST": #Get the posted form MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] else: MyLoginForm = Loginform() return render(request, 'loggedin.html', {"username" : username})
هذا الرؤية ستعرض نتيجة نموذج الloguein.html. من أجل اختبارها، نحتاج أولاً إلى نموذج نموذج الloguein. دعونا نسميه: login.html.
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 <html> <body> <form name = "form" action = "{% url "myapp.views.login" %}" method = "POST" >{% csrf_token %} <div style = "max-width:470px;"> <center> <input type = "text" style = "margin-left:20%;" placeholder = "Identifiant" name = "username" /> </center> </div> <br> <div style = "max-width:470px;"> <center> <input type = "password" style = "margin-left:20%;" placeholder = "password" name = "password" /> </center> </div> <br> <div style = "max-width:470px;"> <center> <button style = "border:0px; background-color:#4285F4; margin-top:8%; height:35px; width:80%;margin-left:19%;" type = "submit" value = "Login" > <strong>Login</strong> </button> </center> </div> </form> </body> </html>
سيظهر النموذج هذا عرض نموذج الدخول، وسيتم نشر النتيجة التي رأيناها في تسجيل الدخول أعلاه. قد لاحظت أن النموذج هذا هو فقط لمنع هجمات CSRF (Cross-Site Request Forgery) في موقعك.
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 {% csrf_token %}
بعد الحصول على نموذج الدخول، نحتاج إلى عرض نموذج loggedin.html بعد معالجة النموذج.
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 <html> <body> أنت: <strong>{{username}}</strong> </body> </html>
الآن، نحتاج فقط إلى URLs لبدء: myapp/urls.py
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/',TemplateView.as_view(template_name = 'login.html')), url(r'^login/', 'login', name = 'login'))
عند زيارة " /myapp/connection "، سنحصل على عرض نموذج login.html كما يلي −
بعد تقديم الجدول السابق، تكون الصيغة صحيحة. في مثالنا يجب ملء两个字段的، للحصول على النتيجة التالية −
إذا كان اسم مستخدمك polo، وكنت قد نسيت كلمة المرور. ستحصل على الرسالة التالية −
باستخدام التحقق الخاص بنا للنموذج
في المثال السابق، يتم التحقق من صحة النموذج كما يلي −
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 MyLoginForm.is_valid()
نستخدم محرك التحقق الذاتي لدjango فقط، في المثال التالي فقط للتأكد من أن هذا الحقل ضروري. دعونا نحاول التأكد من أن المستخدم الذي يحاول الدخول موجود في قاعدة بياناتنا كـ Dreamreal item. بالنسبة لذلك، قم بتغيير myapp/forms.py إلى −
# اسم الملف: example.py # حقوق النشر: 2020 بواسطة w3codebox # Author by: ar.oldtoolbag.com # Date: 2020-08-08 #-*- coding: utf-8 -*- من django وارد من myapp.models وارد فئة LoginForm(forms.Form): user = forms.CharField(max_length = 100) password = forms.CharField(widget = forms.PasswordInput()) تعريف clean_message(self): username = self.cleaned_data.get("username") dbuser = Dreamreal.objects.filter(name = username) إذا لم يكن dbuser: إطلاق خطأ "forms.ValidationError("User does not exist in our db!")" إرجاع اسم المستخدم
الآن، بعد إجراء مكالمة للطريقة "is_valid"، سنحصل على الناتج الصحيح، فقط إذا كان المستخدم في قاعدة بياناتنا. إذا كنت ترغب في استعلام عن حقل النموذج، فإن إضافة طريقة تبدأ بـ "clean_"، واسم الحقل يتطابق مع حقل النموذج في الفئة، يعتبر مهمًا لإثارة خطأ "forms.ValidationError".