weschool - www w3schools com html5




تعطيل HTML الهروب في TextField دجانجو (2)

كيف يمكنني إيقاف تشغيل HTML التلقائي لـ Django ، عند الكتابة في TextField للنموذج؟


أعتقد أن الطريقة الأفضل لفعل ذلك كما يصفهاDaniel Vassallo.

لماذا ا؟

لأنه بهذه الطريقة ، يمكنك إجراء بعض عمليات الأمان على رمز HTML الذي تريد عرضه دون الهروب ، خاصة للحماية من البرمجة النصية للموقع عبر ( XSS ).

على سبيل المثال ، يمكنك التحقق مما إذا كان my_textfield يحتوي على علامة نصي .
إذا كان الأمر كذلك ، قم بتمييز المثيل على أنه خبيث وقم بإرجاع نسخة my_textfield من my_textfield (سلوك my_textfield العادي).
بخلاف ذلك ، استخدم mark_safe لإرجاع رمز HTML الخاص بك الذي تم وضع علامة آمن له .

هنا:

from django.utils.safestring import mark_safe 

class MyModel(models.Model): 
    my_textfield = models.TextField()
    is_malisious = models.BooleanField(default=False)

    def display_my_safefield(self):
        if '<script>' in self.my_textfield:
            self.is_malicious = True
            self.save()
            return self.my_textfield
        return mark_safe(self.my_textfield)

وكل هذا لا يحتاج إلى أي عمليات ترحيل إلى قاعدة البيانات.

طريقه بديله

أعتقد أنه يمكنك إجراء عملية الأمان هذه عن طريق إلغاء طريقة save() الخاصة بطرازك ، بما في ذلك التحقق وأي عملية ضرورية أخرى ضد محتوى ضار بداخله. بعد ذلك ، يمكنك استخدامbjunix إذا تأكدت من أن أي محتوى محفوظ آمن.


إحدى الطرق للقيام بذلك هي وضع وظيفة في النموذج الخاص بك والتي ترجع البيانات المميزة بأنها آمنة:

from django.utils.safestring import mark_safe 

class MyModel(models.Model): 
    my_textfield = models.TextField()

    def display_my_safefield(self): 
        return mark_safe(self.my_textfield)

ثم في القالب ، سيكون عليك استخدام:

{{ instance.display_my_safefield }}




textfield