Django çarçuwasyny ulanyp, ykjam dostlukly web programmalaryny nädip döretmeli - 3-nji bölüm
Bu seriýanyň 1-nji bölüminde Django-ny wirtual gurşawda nädip gurmalydygyny we sazlamalydygyny öwrendiňiz we ilkinji taslamaňyzyň süňküni döretdiňiz.
Soňra 2-nji bölümde Post obýektleri üçin programma we model döretdik, soň bolsa maglumatlar bazasyna göçdük. Ahyrynda, täze döredilen programmaňyzy Django administrasiýasynyň ulanyjy interfeýsine nädip birikdirmelidigini görkezdik.
Bu makalalar Django seriýasynyň bir bölegi:
Bu gutarnykly gollanmada UI ulanyp, programma nädip girip boljakdygyny we ony her dürli enjamlar üçin ykjam amatly edip boljakdygyny ara alyp maslahatlaşarys. Diýdi, başlalyň.
Django administrator interfeýsi arkaly obýektler döretmek
“Post” görnüşli obýektleri döretmek üçin (bu seriýanyň 2-nji bölüminde kesgitlän modelimizi ýadyňyzdan çykarmaň), Django administrator interfeýsini ulanarys.
Gurlan Django web serweriniň daşarky myfirstdjangoproject katalogyndan aşakdaky buýrugy işledip, 8000 portda (ýa-da saýlanlaryňyzyň biri) işleýändigine göz ýetiriň:
# cd ~/myfirstdjangoenv/myfirstdjangoproject # python manage.py runserver 0.0.0.0:8000
Indi web brauzeriňizi açyň we http:// ip-address: 8000/admin
görkeziň, soňra öňki makalada guran şahsyýet maglumatlaryňyzy ulanyp giriň we ýazgy ýazyp başlaň (bu, ýene, Post görnüşli obýekt döreder we baglanyşykly maglumatlary esasy maglumatlar bazasyna girizer):
Amaly 2 ýa-da 3 gezek gaýtalaň:
Birnäçe ýazgy döredenimizden soň, web brauzerimizi ulanyp görkezmek üçin näme etmelidigimizi göreliň.
Ilkinji görnüşimiz
Ilkinji görnüşimiz (~/myfirstdjangoenv/myfirstdjangoproject/myblog/views.py) ähli Post obýektlerini süzmek we haçan çap edilen wagtynyň bahasy häzirki senä we wagta (ýa-da çap edilen__lte=timezone.now()) çap edilende aşak düşmek bilen sargyt edilýär, bu iň soňky ilkinji diýmek bilen deňdir.
Bu obýektler amatly atlandyrylan ýazgylarda saklanýar we indiki bölümde görşümiz ýaly HTML-de ýerleşdirilmegi üçin yzyna iberilýär (allpostlar hökmünde kesgitlenýär):
from django.shortcuts import render from .models import Post from django.utils import timezone def posts(request): posts = Post.objects.filter(whenPublished__lte=timezone.now()).order_by('-whenPublished') return render(request, 'myblog/posts.html', {'allposts': posts})
Netijede, ýokardaky -da çap edilen__lte
goşa aşaky çyzgy, maglumatlar bazasynyň meýdançasyny (haçan çap edilende) süzgüçden ýa-da amaldan (lte=az ýa-da deň) aýyrmak üçin ulanylýar.
Ilkinji görnüşimizi kesgitlänimizden soň, baglanyşykly şablonyň üstünde işläliň.
Ilkinji Taslamamyz üçin Şablon dörediň
Öňki bölümde berlen görkezmelere we ýollara eýerip, başlangyç şablonymyzy myblog/templates/myblog-da saklarys. Diýmek, şablonlar atly katalog we myblog atly kiçi bukja döretmeli bolarsyňyz.
# cd ~/myfirstdjangoenv/myfirstdjangoproject/myblog # mkdir -p templates/myblog
Şablony posts.html
diýip atlandyrarys we oňa aşakdaky kody girizeris. JQuery, Bootstrap, FontAwesome we Google şriftlerine onlaýn salgylanmalary goşýandygymyzy görersiňiz.
Mundan başga-da, HTML-iň içindäki egri ýaýlaryň içinde Python koduny goşduk. “Post” görnüşiniň her bir obýekti üçin adyny, neşir edilen senesini we awtoryny we ahyrynda tekstini görkezjekdigimize üns bermegiňizi haýyş edýäris. Ahyrynda, gyzyl reňkde myblog/views.py arkaly yzyna gaýtarylan zatlara salgylanýandygymyzy görersiňiz:
Bolýar, ine, post.html faýly:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link href='https://fonts.googleapis.com/css?family=Indie+Flower' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" type='text/css'"> <script src="https://code.jquery.com/jquery-2.1.4.min.js"> </script> <style> .title { font-family: 'Indie Flower', serif; font-size: 30px; color: #1E90FF; } h1 { font-family: 'Pacifico', serif; font-size: 45px; color: #1E90FF; } </style> </head> <body> <div class="container"><h1>My blog</h1><br> {% for post in allposts %} <div> <div class="title">{{ post.title }}</div> <strong>Published on {{ post.whenPublished }} by {{ post.author }}.</strong> <p>{{ post.text|linebreaks }}</p> </div> {% endfor %} </div> </body> </html>
Aboveokardaky şablonda, setir bölekleriniň süzgüji, adaty tekstdäki setir böleklerini degişli HTML ekwiwalenti (
ýa-da
Ondan soň, programmamyzdaky URL-ler bilen maglumatlary yzyna gaýtaryp berýän degişli görnüşleriň arasynda kartalaşdyrma düzmeli. Munuň üçin myblogyň içinde aşakdaky mazmunly urls.py atly bir faýl dörediň:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.posts, name='posts'), ]
r ^$
birneme has köp düşündirişe mynasyp. Öňdebaryjy r
Django-a ýeke sitatanyň içindäki setiri adaty aňlatma hökmünde görkezmegi tabşyrýar.
Hususan-da, r ^$
boş setiri aňladýar, şonuň üçin brauzerimizi http:// ip-address: 8000
(we başga hiç zat) görkezenimizde maglumatlar yzyna gaýdyp geldi views.py
içindäki üýtgeýän ýazgylar bilen (öňki bölüme serediň) baş sahypamyzda görkeziler:
Iň soňkusy, iň bolmanda, blog programmamyzyň urls.py faýlyny (~/myfirstdjangoenv/myfirstdjangoproject/myblog/urls.py) esasy taslamamyzyň urls.py sahypasyna goşarys (~/myfirstdjangoenv/myfirstdjangoproject/myfirstdjangoproject/urls .py):
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'', include('myblog.urls')), ]
Soňra web serwerine başlalyň:
# cd ~/myfirstdjangoenv/myfirstdjangoproject # python manage.py runserver 0.0.0.0:8000
Indi ozal döreden ýazgylarymyzyň sanawyny görüp bilmeli:
“Bootstrap” -yň kömegi bilen has kiçi enjamda ajaýyp wizuallaşdyryp bilersiňiz:
Jemleme
Geliň indi bu makalada we şu seriýamyzda açan düşünjelerimizi gözden geçireliň:
1. Her bir model bir obýekti kesgitleýär we maglumatlar binýadynyň tablisasyna kartalary kesgitleýär, meýdanlary bolsa öz gezeginde şol obýektiň häsiýetlerine laýyk gelýär. Başga bir tarapdan, şablon ulanyjy interfeýsini kesgitleýär, bu ýerde görnüş bilen yzyna gaýtarylýan maglumatlar görkeziler.
Geliň, her bir ýazgynyň goşmaça gysgaça beýanyny saklar ýaly, Poçta obýektine gysgaça mazmunly meýdan goşup, modelimizi üýtgetmek isleýäris. Myblog/models.py-a aşakdaky setiri goşalyň:
summary = models.CharField(max_length=350, blank=True, null=True)
Öňki makalada öwrenişimiz ýaly, üýtgeşmeleri maglumatlar bazasyna geçirmeli:
# python manage.py makemigrations myblog # python manage.py migrate myblog
Soňra ýazgylary redaktirlemek we her ýazga gysgaça mazmun goşmak üçin administrator interfeýsini ulanyň. Ahyrynda, şablonda aşakdaky setiri çalyşyň (posts.html):
<p>{{ post.text|linebreaks }}</p>
bilen
<p>{{ post.summary }}</p>
Üýtgeşmeleri görmek üçin baş sahypany täzeläň:
2. Görkeziş funksiýasy HTTP haýyşyny alýar we HTTP jogabyny yzyna berýär. Bu makalada def. postlar (haýyş) views.py esasy ýazgylara ähli ýazgylary almak üçin jaň edýär. Postshli ýazgylary sözbaşy sözüne laýyk söz bilen almak islesek, çalyşmaly.
posts = Post.objects.filter(whenPublished__lte=timezone.now()).order_by('-whenPublished')
bilen
posts = Post.objects.filter(title__icontains="ansible").order_by('-whenPublished')
Ulanyjy interfeýsini web programmalaryndaky programma logikasyndan aýyrmak bilen, Django programmalary goldamak we ýokarlandyrmak meselelerini ýeňilleşdirýär.
3. Bu seriýada görkezilen görkezmeleri ýerine ýetiren bolsaňyz, taslamaňyzyň gurluşy aşakdaky ýaly bolmaly:
myfirstdjangoenv/myfirstdjangoproject ├── db.sqlite3 ├── manage.py ├── myblog │ ├── admin.py │ ├── admin.pyc │ ├── __init__.py │ ├── __init__.pyc │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0001_initial.pyc │ │ ├── __init__.py │ │ └── __init__.pyc │ ├── models.py │ ├── models.pyc │ ├── templates │ │ └── myblog │ │ └── posts.html │ ├── tests.py │ ├── urls.py │ ├── urls.pyc │ ├── views.py │ └── views.pyc └── myfirstdjangoproject ├── __init__.py ├── __init__.pyc ├── settings.py ├── settings.pyc ├── urls.py ├── urls.pyc ├── wsgi.py └── wsgi.pyc
Aboveokardaky sanaw brauzeriňizde dogry görkezilmedik ýagdaýynda, aşakdaky buýrugyň çykyşynyň skrinshoty:
# tree myfirstdjangoenv/myfirstdjangoproject
Gysgaça mazmun
Bu düşünjeleriň hemmesi başda birneme gorkuzýan ýaly bolup görünse-de, Django bilen tanyşmak üçin zerur bolan ähli tagallalara mynasypdygyny aýdyp bilerin.
Bu ajaýyp web çarçuwasy bilen tanyşdyrmak üçin bu seriýamyzda ulanan mysalymyz sizi has köp zat öwrenmäge itergi berer diýip umyt edýärin. Şeýle bolsa, resmi Django resminamalary (hemişe täzelenýär) başlamak üçin iň gowy ýerdir.
Django üçin birgiden makalada ýeterlik derejede ýazyp biljek zatlarymyzyň köpdügine kepil geçip bilerin, şonuň üçin öwrenip, öwrenip bilersiňiz!
Aşakdaky formany ulanyp, bize soraglar ýa-da teklipler bilen bellik goýup bilersiňiz.