Django-pribadong-tanawin ay isang Django app na nagbibigay ng mga karaniwang pattern sa website ay kapag ang ilang mga pahina ay protektado at nangangailangan ng isang pag-login upang ma-access. & Nbsp; Anglogin_required dekorador madalas ay sa madaling-gamiting para sa mga sitwasyong ito. Ngunit, isa pang pattern na kung saan ay medyo pangkaraniwan ay kapag ang karamihan sa mga site ay protektado, sa ilang mga pagbubukod ng mga pahina na mananatiling publiko (hal frontpage, registration page, atbp). Sa kasong iyon, maaari itong maging masyadong pagod upang palamutihan ang lahat ng mga tanawin salogin_required, at maaari itong maging madaling kalimutan na palamutihan ang ilan sa kanila.
Django-pribadong-tanawin nagpoprotekta sa bawat view at pagkatapos ay nagbibigay-daan sa tahasan mong sinabi na tanawin ay dapat na pampubliko. Ginagawa nitong bagay na parehong madali at mababang tsansa ng error.
Pag-install
I-install Django-pribadong-tanawin mula sa PyPI.
buto ng bungang-kahoy-install Django-pribadong-tanawin
Idagdag ang privateviews middleware sa iyong mga setting:
MIDDLEWARE_CLASSES = (
& Nbsp; ...
& Nbsp; privateviews.middleware.LoginRequiredMiddleware
)
Ang pagdeklara ng pampublikong tanawin
Sa puntong ito, ang lahat ng iyong mga tanawin maliban settings.LOGIN_URL ay humihiling sa iyo na mag-log in. Kaya, kailangan namin ngayon upang tukuyin ang ilang mga tanawin na dapat na pampubliko. May tatlong iba't ibang mga paraan sa iyong pagtatapon: gamit ang isang espesyal na dekorador, na naglilista ng mga pampublikong tanawin, o paglilista ng mga path ng pampublikong URL.
Paggamit ng isang dekorador
Paggamit nglogin_not_required maaari mong tahasang pilitin ang isang view upang maging pampublikong. Halimbawa:
mula privateviews.decorators login_not_required pag-import
login_not_required
def frontpage (kahilingan):
& Nbsp; ...
Sa kasong ito, ang view frontpage ay ipapakita nang maayos kahit na & rsquo; y hindi naka-log in.
Listahan pampublikong tanawin
Kung hindi mo & rsquo kang direktang access sa baguhin ng tanawin & rsquo; s code (eg, ito & rsquo; s sa isang third-party na application), mo pa rin pilitin na view na maging publiko sa pamamagitan ng pagdagdag nito sa setting na PUBLIC_VIEWS sa iyong file setting. Narito & rsquo; s isang halimbawa kung ikaw & rsquo; y gamit ang django.contrib.auth system at ang application Django-pagpaparehistro:
PUBLIC_VIEWS = [
& Nbsp; 'django.contrib.auth.views.login',
& Nbsp; 'django.contrib.auth.views.password_reset_done',
& Nbsp; 'django.contrib.auth.views.password_reset',
& Nbsp; 'django.contrib.auth.views.password_reset_confirm',
& Nbsp; 'django.contrib.auth.views.password_reset_complete',
& Nbsp; 'registration.views.register',
& Nbsp; 'registration.views.activate',
]
Listahan ng URL path pampublikong
Ang ikatlong at huling paraan ay ang direktang tukuyin ang path ng URL (tulad ng mga regular na expression) para sa mga pahinang nais mong maging pampubliko. Maaari itong maging kapaki-pakinabang, halimbawa, kung ang isang pahina ay na-render sa pamamagitan ng generic na view. Ito ay kapaki-pakinabang din kung ikaw ay naghahain ng iyong mga file ng media sa pamamagitan ng statically Django (inirerekomenda lamang sa mode na pag-unlad). Para sa mga iyon, kailangan mong idagdag ang PUBLIC_PATHS pagtatakda sa iyong file setting. Narito & rsquo; s isang halimbawa:
PUBLIC_PATHS = [
& Nbsp; '^% s'% MEDIA_URL,
& Nbsp; '^ / accounts / magrehistro / kumpleto / $', # Gumagamit ang 'direct_to_template' generic na view
]
Paggawa ng 404 mga tanawin pribadong
Sa puntong ito di-log in mga gumagamit ay magagawang upang makita ang 404 mga tugon kung bumibisita sila sa isang url na hindi map sa isang view pa rin. Iyan ay hindi perpekto dahil hindi ito ay kailangang maging posible na matukoy ang istraktura ng site nang hindi ina-log in.
Upang gumawa ng 404 mga tanawin pribadong sa lahat ng tao maliban naka-log in na user, idagdag ang sumusunod bilang panghuling linya sa iyong nangungunang antas urlconf:
urlpatterns = pattern ('',
& Nbsp; ...
& Nbsp; url (r '^', 'privateviews.views.private_404')
)
Mga Kinakailangan :
- Python
- Django
Mga Komento hindi natagpuan