Mix-ins(karışımlar): Mix-ins (karışımlar) temelde bildiğimiz class tırlar. Class larda miras(inheritance) kullanımıyla işlevselliğini atırır. Ama bu tam olarak bir örnekleme(instantiated) yapmak gibi de değildir. Başka bir deyişle Class-based views kullanırken farklı parent class ların davranışlarının ve özniteliklerinin birleştirilebildiği bir çoklu kalıtım biçimidir. Başka bir şekilde ifade etmek gerekirse mixins(karışımlar), birden çok ana sınıfın davranışlarının ve özniteliklerinin birleştirilebildiği bir çoklu kalıtım biçimidir, yani karışımdır.
Kalıtım alırken yalnızca bir generic views(genel görünümden) dan miras alabileceğinizi unutmayın. Yani View generic views(genel görünümden) ProcessFormView ve ListView gibi iki tane miras alamazsınız, çalışmaz.
Örnek Kullanım:
class TemplateView( TemplatesResponseMixin, ContextMixin, View):
renders templates, context vb..
def get(self, request, *arg, **kwargs):
context=self. get_context_data(**kwargs)
return self.render_to_response(context)
örnekten çıkarımlar:
1. TemplateView isimli class a baktığımızda, django nun temel class ı olan View en sağda yer alır, bundan sonra gelecek karışımlar(mix_ins)sol tarafa doğru devam eder. Örnekte Views dan sonra ilk ContextMixin sonra yine soluna gelecek şekilde TemplatesResponseMixins gelmiş.
2. Miras zincirini sığ tutmaya gayret gösterin. Yoksa işler karışabilir.
3. Python 'un built_in objelerinden miras alması gerekir. Bunu aşağıdaki örnekte görelim.
örnek:
class ContextMixin( object)
.
.
def get_context_data(self, **kwargs):
if ....
(örneğinde geçen object de olduğu gibi...)
kaynakça:
https://docs.djangoproject.com/en/3.1/topics/class-based-views/intro/
0 Yorumlar