{"title":"Réamhrá ar thuairimí rangbhunaithe","version":"6.0","locale":"ga","docname":"topics/class-based-views/intro","url":"/ga/6.0/topics/class-based-views/intro/","canonical":"https://djangodocs.dev/ga/6.0/topics/class-based-views/intro/","summary":"Soláthraíonn tuairimí rang-bhunaithe bealach malartach chun tuairimí a chur i bhfeidhm mar rudaí Python in ionad Ní chuireann siad in ionad tuairimí…","html":"<h1>Réamhrá ar thuairimí rangbhunaithe<a class=\"heading-anchor\" href=\"#introduction-to-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Soláthraíonn tuairimí rang-bhunaithe bealach malartach chun tuairimí a chur i bhfeidhm mar rudaí Python in ionad Ní chuireann siad in ionad tuairimí bunaithe ar fheidhm, ach tá difríochtaí agus buntáistí áirithe acu i gcomparáid le tuairimí feidhmion-</p>\n<ul class=\"simple\">\n<li><p>Is féidir aghaidh a thabhairt ar eagrú cód a bhaineann le modhanna HTTP ar leith (GET`, POST `, srl.) trí mhodhanna ar leithligh in ionad brainse coinníollach.</p></li>\n<li><p>Is féidir teicnící dírithe ar réad mar mheascáin (oidhreacht iolrach) a úsáid chun cód a fhachtóireacht i gcomhpháirteanna in-athúsá</p></li>\n</ul>\n<section id=\"the-relationship-and-history-of-generic-views-class-based-views-and-class-based-generic-views\">\n<h2>Caidreamh agus stair tuairimí cineálacha, tuairimí rang-bhunaithe, agus tuairimí cineálacha aicmbunaithe<a class=\"heading-anchor\" href=\"#the-relationship-and-history-of-generic-views-class-based-views-and-class-based-generic-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sa tús ní raibh ach an conradh feidhme amharc ann, rith Django do fheidhm an:class: ~django.http.httpRequest agus bhíothas ag súil leis an:class: ~django.http.httpResponse. Ba é seo méid an méid a chuir Django ar fáil.</p>\n<p>Go luath aithníodh go raibh nathanna agus patrúin choitianta le fáil i bhféachaint ar fhorbairt. Tugadh tuairimí cineálacha bunaithe ar fheidhm isteach chun na patrúin seo a thaibhriú agus chun forbairt radhairc a éascú</p>\n<p>Is í an fhadhb le tuairimí cineálacha bunaithe ar fheidhm ná cé go gclúdaigh siad na cásanna simplí go maith, ní raibh aon bhealach ann iad a leathnú nó a shaincheapadh níos faide ná roinnt roghanna cumraíochta, ag teorannú lena n-úsáideacht i go leor feidhmchlár</p>\n<p>Cruthaíodh tuairimí cineálacha rang-bhunaithe leis an gcuspóir céanna le tuairimí cineálacha feidhmiúbhunaithe, chun forbairt radhairc a dhéanamh níos Mar sin féin, soláthraíonn an bealach a chuirtear an réiteach i bhfeidhm, trí mheascáin a úsáid, foireann uirlisí a dtagann tuairimí cineálacha aicmbunaithe níos leathnaithe agus níos solúbtha ná a gcomhghleacaithe feidhmiúbhunaithe.</p>\n<p>Má rinne tú triail as tuairimí cineálacha bunaithe ar fheidhm san am atá thart agus má fuair tú easpa iad, níor cheart duit smaoineamh ar thuairimí cineálacha aicmbunaithe mar choibhéis aicme-bhunaithe, ach mar chur chuige úr chun na fadhbanna bunaidh a bhí i gceist le tuairimí cineálacha a réiteach.</p>\n<p>Tógtar an tacar uirlisí bunaicmí agus meascáin a úsáideann Django chun tuairimí cineálacha aicmbunaithe a thógáil chun an solúbthacht is mó, agus mar sin tá go leor crúcaí acu i bhfoirm cur i bhfeidhm agus tréithe modhanna réamhshocraithe nach dócha go mbeidh imní ort sna cásanna úsáide is simplí. Mar shampla, in ionad tú a theorannú do thréith rang-bhunaithe do form_class`, úsáideann an cur i bhfeidhm modh <code class=\"docutils literal notranslate\">get_form</code>, a ghlaonn modh <code class=\"docutils literal notranslate\">get_form_class</code>, a thugann tréith <code class=\"docutils literal notranslate\">form_class</code> ar ais ina chur i bhfeidhm réamhshocraithe tréith form_class`. Tugann sé seo roinnt roghanna duit chun an fhoirm atá le húsáid a shonrú, ó thréith, go crúca lán-dinimiciúil, inghlaonta. Is cosúil go gcuireann na roghanna seo castacht log le haghaidh cásanna simplí, ach gan iad, bheadh dearaí níos airde teoranta.</p>\n</section>\n<section id=\"using-class-based-views\">\n<h2>Ag baint úsáide as tuairimí bunaithe<a class=\"heading-anchor\" href=\"#using-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ag croílár, ligeann radharc rang-bhunaithe duit freagairt a thabhairt do mhodhanna éagsúla iarratais HTTP le modhanna éagsúla scála ranga, in ionad le cód brainse coinníollach taobh istigh de fheidhm amharc amháin.</p>\n<p>Mar sin, cá mbeadh cuma ar an gcód chun HTTP <code class=\"docutils literal notranslate\">GET</code> a láimhseáil i bhfeidhm amharc:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s2\">&quot;GET&quot;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># &lt;view logic&gt;</span>\n        <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;result&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>I dtuairim rang-bhunaithe, bheadh sé seo mar seo a leanas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.views</span> <span class=\"kn\">import</span> View\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>View<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"c1\"># &lt;view logic&gt;</span>\n        <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;result&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Toisc go bhfuil réiteach URL Django ag súil leis an iarraidh agus na hargóintí gaolmhara a sheoladh chuig feidhm inghlaonta, ní rang, tá modh ranga ag tuairimí rang-bhunaithe: meth: ~django.views.generic.base.view.as_view a thugann feidhm ar féidir a ghlaoch nuair a thagann iarratas ar URL a mheaitseann an patrún gaolmhar. Cruthaíonn an fheidhm sampla den rang, glaoirí:meth: ~django.views.generic.base.view.setup chun a thréithe a thionscnamh, agus ansin glaonn sé ai:meth: ~Django.Views.Generic.Base.View.Dispatch `modh. Féachann ``seolach` ar an iarratas chun a chinneadh an bhfuil sé <code class=\"docutils literal notranslate\">GET</code>, POST `, srl., agus athsheachadann sé an t-iarratas chuig modh meaitseála má tá ceann sainmhínithe, nó ardaíonn sé: class: ~django.http.httpResponseNotAllowed mura bhfuil:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># urls.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.views</span> <span class=\"kn\">import</span> MyView\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> MyView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Is fiú a thabhairt faoi deara go bhfuil an méid a thugann do mhodh comhionann leis an méid a fhilleann tú ó radharc feidhmiúbhunaithe, eadhon cineál éigin de:class: ~django.http.httpResponse. Ciallaíonn sé seo go bhfuil rudaí:doc: http shortcuts nó:class: ~django.template.response.templateResponse &lt;/topics/http/shortcuts&gt; bailí le húsáid taobh istigh de radharc rang-bhunaithe.</p>\n<p>Cé nach dteastaíonn aon tréithe ranga ag teastáil ó radharc íosta bunaithe ar rang chun a phost a chomhlíonadh, tá tréithe ranga úsáideach i go leor dearaí rang-bhunaithe, agus tá dhá bhealach ann chun tréithe ranga a chumrú nó a shocrú.</p>\n<p>Is é an chéad cheann an bealach caighdeánach Python chun tréithe agus modhanna a fho-aicmiú agus a shárú sa fho-rang. Mar sin má bhí tréith <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>beannachtaí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>mar seo ag do rang tuismitheora:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.views</span> <span class=\"kn\">import</span> View\n\n\n<span class=\"k\">class</span> <span class=\"nc\">GreetingView</span><span class=\"p\">(</span>View<span class=\"p\">):</span>\n    greeting <span class=\"o\">=</span> <span class=\"s2\">&quot;Good Day&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>greeting<span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir leat é sin a shárú i bhfo-aicme:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MorningGreetingView</span><span class=\"p\">(</span>GreetingView<span class=\"p\">):</span>\n    greeting <span class=\"o\">=</span> <span class=\"s2\">&quot;Morning to ya&quot;</span>\n</code></pre></div>\n<p>Rogha eile is ea tréithe ranga a chumrú mar argóintí eochairfhocal chuig an nglao:meth: ~django.views.generic.base.view.as_view sa urlConf:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> GreetingView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>greeting<span class=\"o\">=</span><span class=\"s2\">&quot;G&#39;day&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Cé go ndéantar do rang le haghaidh gach iarratas a sheoltar chuige, ní chumraítear tréithe ranga trí:meth: ~django.views.generic.base.view.as_view pointe iontrála ach uair amháin ag an am a allmhairítear d'URLanna.</p>\n</aside>\n</section>\n<section id=\"using-mixins\">\n<h2>Meascáin a úsáid<a class=\"heading-anchor\" href=\"#using-mixins\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is cineál oidhreachta iolracha iad meascáin inar féidir iompraíochtaí agus tréithe ranganna ilthuismitheoirí a chomhcheangal.</p>\n<p>Mar shampla, sna tuairimí cineálacha bunaithe ar rang tá meascán ar a dtugtar: class: ~django.views.generic.base.templateResponseMixin a bhfuil príomhchuspóir aige an modh a shainiú: meth: ~Django.Views.Generic.Base.TemplateResponsemixin.Render_to_Response. Nuair a dhéantar é a chomhcheangal le hiompar an aicme bonn:class: ~django.views.Generic.Base.View, is é an toradh: aicme ~Django.Views.Generic.Base.TemplateView a sheolfaidh iarratais chuig na modhanna meaitseála iomchuí (iompar atá sainmhínithe sa rang <code class=\"docutils literal notranslate\">View</code>), agus a bhfuil a:meth: ~Django.Views.Geners.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Generic.Views.Modh.base.TemplateResponseMixin.Render_to_Response a úsáideann a:attr: ~Django.Views.Generic.Base.TemplateResponseMixin.Template_Name tréith chun a:class: ~Django.Template.Response.TemplateResponse réad (iompar atá sainmhínithe sa `` TeimpléadResponseMixin <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>).</p>\n<p>Is bealach den scoth iad Mixins chun cód a athúsáid ar fud ranganna éagsúla, ach tagann roinnt costas leo. An níos mó a scaiptear do chód i measc meascáin, is deacra a bheidh sé rang leanaí a léamh agus a fhios a fháil amach cad é go díreach atá á dhéanamh aige, agus is deacra a bheidh sé a fháil amach cé na modhanna as a bhfuil meascáin le frithsheasmhú má tá tú ag fo-aicmiú rud a bhfuil crann oidhreachta domhain aige.</p>\n<p>Tabhair faoi deara freisin nach féidir leat oidhreacht ach ó dhearcadh cineálach amháin - is é sin, ní fhéadfaidh ach rang tuismitheora amháin oidhreacht ó:class: ~django.views.Generic.Base.View agus ba chóir go mbeadh an chuid eile (más ann) ina meascáin. Ag iarraidh oidhreacht a dhéanamh ó níos mó ná aicme amháin a fhaigheann oidhreacht ó <code class=\"docutils literal notranslate\">View</code> - mar shampla, ag iarraidh foirm a úsáid ag barr liosta agus comhcheangail:class: ~django.views.list.Generic.Generic.Edit.ProcessFormView agus:class: ~Django.Views.Generic.ListView - ní oibreoidh sé mar a bhíothas ag súil leis.</p>\n</section>\n<section id=\"handling-forms-with-class-based-views\">\n<h2>Foirmeacha a láimhseáil le tuairimí rang-<a class=\"heading-anchor\" href=\"#handling-forms-with-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>D'fhéadfadh sé go mbeadh cuma mar seo ar dhearcadh bunúsach feidhmiúbhunaithe a láimhseálann</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponseRedirect\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"kn\">import</span> MyForm\n\n\n<span class=\"k\">def</span> <span class=\"nf\">myview</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        form <span class=\"o\">=</span> MyForm<span class=\"p\">(</span>request<span class=\"o\">.</span>POST<span class=\"p\">)</span>\n        <span class=\"k\">if</span> form<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            <span class=\"c1\"># &lt;process form cleaned data&gt;</span>\n            <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"s2\">&quot;/success/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        form <span class=\"o\">=</span> MyForm<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;key&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;value&quot;</span><span class=\"p\">})</span>\n\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;form_template.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> form<span class=\"p\">})</span>\n</code></pre></div>\n<p>D'fhéadfadh cuma ar radharc den chineál céanna bunaithe ar rang:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponseRedirect\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n<span class=\"kn\">from</span> <span class=\"nn\">django.views</span> <span class=\"kn\">import</span> View\n\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"kn\">import</span> MyForm\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyFormView</span><span class=\"p\">(</span>View<span class=\"p\">):</span>\n    form_class <span class=\"o\">=</span> MyForm\n    initial <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;key&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;value&quot;</span><span class=\"p\">}</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;form_template.html&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        form <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>form_class<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>initial<span class=\"p\">)</span>\n        <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>template_name<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> form<span class=\"p\">})</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        form <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>form_class<span class=\"p\">(</span>request<span class=\"o\">.</span>POST<span class=\"p\">)</span>\n        <span class=\"k\">if</span> form<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            <span class=\"c1\"># &lt;process form cleaned data&gt;</span>\n            <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"s2\">&quot;/success/&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>template_name<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> form<span class=\"p\">})</span>\n</code></pre></div>\n<p>Is cás íosta é seo, ach is féidir leat a fheiceáil go mbeadh an rogha agat ansin an dearcadh seo a shaincheapadh trí aon cheann de na tréithe ranga a shárú, m.sh. <code class=\"docutils literal notranslate\">form_class</code>, trí chumraíocht URLConf, nó ceann amháin nó níos mó de na modhanna (nó an dá cheann!) a fho-aicmiú agus a shárú.</p>\n</section>\n<section id=\"decorating-class-based-views\">\n<h2>Tuairimí rangbhunaithe a mhaisiú<a class=\"heading-anchor\" href=\"#decorating-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Níl síneadh tuairimí rang-bhunaithe teoranta do mheascáin a úsáid. Is féidir leat maisitheoirí a úsáid freisin. Ós rud é nach feidhmeanna iad tuairimí rang-bhunaithe, oibríonn iad a mhaisiú go difriúil ag brath ar an bhfuil tú ag úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>as_view () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>nó ag cruthú fo-aicme.</p>\n<section id=\"decorating-in-urlconf\">\n<h3>Maisiú i URLConf<a class=\"heading-anchor\" href=\"#decorating-in-urlconf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir leat tuairimí rang-bhunaithe a choigeartú trí thoradh an modh:meth: ~Django.Views.Generic.Base.View.as_View a mhaisiú. Is é an áit is éasca chun é seo a dhéanamh sa URLConf áit a n-úsáideann tú do thuairim:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required<span class=\"p\">,</span> permission_required\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> TemplateView\n\n<span class=\"kn\">from</span> <span class=\"nn\">.views</span> <span class=\"kn\">import</span> VoteView\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> login_required<span class=\"p\">(</span>TemplateView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>template_name<span class=\"o\">=</span><span class=\"s2\">&quot;secret.html&quot;</span><span class=\"p\">))),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;vote/&quot;</span><span class=\"p\">,</span> permission_required<span class=\"p\">(</span><span class=\"s2\">&quot;polls.can_vote&quot;</span><span class=\"p\">)(</span>VoteView<span class=\"o\">.</span>as_view<span class=\"p\">())),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Cuireann an cur chuige seo an maisitheoir i bhfeidhm ar bhonn gach cás. Más mian leat gach cás de radharc a mhaisiú, ní mór duit cur chuige difriúil a ghlacadh.</p>\n</section>\n<section id=\"decorating-the-class\">\n<span id=\"id1\"></span><h3>Maisiú an rang<a class=\"heading-anchor\" href=\"#decorating-the-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Chun gach cás de radharc rangbhunaithe a mhaisiú, ní mór duit sainmhíniú an ranga féin a mhaisiú. Chun seo a dhéanamh cuireann tú an maisitheoir i bhfeidhm ar an modh:: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~Django.Views.Generic.Base.View.Dispatch <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>den rang.</p>\n<p>Níl modh ar rang mar an gcéanna le feidhm neamhspleách, mar sin ní féidir leat maisitheoir feidhme a chur i bhfeidhm ar an modh - ní mór duit é a athrú go maisitheoir modh ar dtús. Athraíonn an maisitheoir method_decorator` maisitheoir feidhme go maisitheoir modh ionas gur féidir é a úsáid ar mhodh sampla. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"kn\">import</span> method_decorator\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> TemplateView\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ProtectedView</span><span class=\"p\">(</span>TemplateView<span class=\"p\">):</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;secret.html&quot;</span>\n\n    <span class=\"nd\">@method_decorator</span><span class=\"p\">(</span>login_required<span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">dispatch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>dispatch<span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n<p>Nó, níos gonta, is féidir leat an rang a mhaisiú ina ionad sin agus ainm an mhodha atá le maisiú a chur ar aghaidh mar an argóint eochairfhocal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ainm <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@method_decorator</span><span class=\"p\">(</span>login_required<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;dispatch&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">ProtectedView</span><span class=\"p\">(</span>TemplateView<span class=\"p\">):</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;secret.html&quot;</span>\n</code></pre></div>\n<p>Má tá tacar de mhaisitheoirí coitianta agat a úsáidtear i roinnt áiteanna, is féidir leat liosta nó tuple maisitheoirí a shainiú agus é seo a úsáid in ionad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>method_decorator () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a ghlaoch arís agus arís eile. Tá an dá rang seo coibhéiseach:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>decorators <span class=\"o\">=</span> <span class=\"p\">[</span>never_cache<span class=\"p\">,</span> login_required<span class=\"p\">]</span>\n\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span>decorators<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;dispatch&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">ProtectedView</span><span class=\"p\">(</span>TemplateView<span class=\"p\">):</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;secret.html&quot;</span>\n\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span>never_cache<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;dispatch&quot;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span>login_required<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;dispatch&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">ProtectedView</span><span class=\"p\">(</span>TemplateView<span class=\"p\">):</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;secret.html&quot;</span>\n</code></pre></div>\n<p>Próiseálfaidh na maisitheoirí iarratas san ord a chuirtear chuig an maisitheoir iad. Sa sampla, próiseálfaidh <code class=\"docutils literal notranslate\">never_cache () ``an t-iarratas roimh ``login_required ()</code>.</p>\n<p>Sa sampla seo, beidh cosaint logála isteach ag gach cás de <code class=\"docutils literal notranslate\">ProtectedView`. Úsáideann na samplaí seo ``login_required</code>, áfach, is féidir an t-iompar céanna a fháil trí:class: ~django.contrib.auth.mixins.loginrequiredMixin a úsáid.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Téann <code class=\"docutils literal notranslate\">method_decorator</code> <code class=\"docutils literal notranslate\">*args</code> agus <code class=\"docutils literal notranslate\">**kwargs</code> mar pharaiméadair chuig an modh maisithe ar an rang. Mura nglacann do mhodh le tacar comhoiriúnach paraiméadair ardóidh sé eisceacht <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>TypeError`.</p>\n</aside>\n</section>\n</section>","rootId":"introduction-to-class-based-views","toc":[{"title":"Caidreamh agus stair tuairimí cineálacha, tuairimí rang-bhunaithe, agus tuairimí cineálacha aicmbunaithe","anchor":"the-relationship-and-history-of-generic-views-class-based-views-and-class-based-generic-views","children":[]},{"title":"Ag baint úsáide as tuairimí bunaithe","anchor":"using-class-based-views","children":[]},{"title":"Meascáin a úsáid","anchor":"using-mixins","children":[]},{"title":"Foirmeacha a láimhseáil le tuairimí rang-","anchor":"handling-forms-with-class-based-views","children":[]},{"title":"Tuairimí rangbhunaithe a mhaisiú","anchor":"decorating-class-based-views","children":[{"title":"Maisiú i URLConf","anchor":"decorating-in-urlconf","children":[]},{"title":"Maisiú an rang","anchor":"decorating-the-class","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.0/topics/"},{"docname":"topics/class-based-views/index","title":"Tuairimí rang-bhunaithe","url":"/ga/6.0/topics/class-based-views/"}],"prev":{"docname":"topics/class-based-views/index","title":"Tuairimí rang-bhunaithe","url":"/ga/6.0/topics/class-based-views/"},"next":{"docname":"topics/class-based-views/generic-display","title":"Tuairimí cineálacha bunaithe ar rang ionsuite","url":"/ga/6.0/topics/class-based-views/generic-display/"},"formats":{"html":"/ga/6.0/topics/class-based-views/intro/","markdown":"/ga/6.0/topics/class-based-views/intro.md","json":"/ga/6.0/topics/class-based-views/intro.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/class-based-views/intro.txt","official":"https://docs.djangoproject.com/ga/6.0/topics/class-based-views/intro/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}