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

) bilen çalyşmak üçin ulanylýar. abzas bölünişi bilen dogry ýazyň.

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.