Weboldal keresés

Mobilbarát webalkalmazások létrehozása a Django Framework segítségével – 3. rész


„Ezt a cikket felülvizsgáltuk és frissítettük a Django legújabb verziójával – 2016. május”

A sorozat 1. részében megtanulta, hogyan telepítse és konfigurálja a Django-t virtuális környezetben, és létrehozta első projektjének vázát.

Ezután a 2. részben létrehoztunk egy alkalmazást és egy modellt a Post objektumokhoz, amelyeket később migráltunk az adatbázisba. Végül megmutattuk, hogyan integrálhatja újonnan létrehozott alkalmazását a Django adminisztrációs felhasználói felületébe.

Ezek a cikkek a Django sorozat részei:

A Django Web Framework telepítése és konfigurálása virtuális környezetekkel – 1. rész

A Python alapjainak áttekintése és az első webes alkalmazás létrehozása a Django segítségével – 2. rész

Ebben az utolsó útmutatóban megvitatjuk, hogyan férhet hozzá az alkalmazáshoz a felhasználói felület segítségével, és hogyan tehetjük mobilbaráttá mindenféle eszközön. Ez azt jelenti, kezdjük.

Objektumok létrehozása a Django adminisztrátori felületén keresztül

Post típusú objektumok létrehozásához (ne feledje, hogy ez az a modell, amelyet a sorozat 2. részében definiáltunk) a Django adminisztrátori felületét fogjuk használni.

Győződjön meg arról, hogy a Django beépített webszerver a 8000 porton fut (vagy egy másik, az Ön által választott porton) a következő parancs futtatásával a külső myfirstdjangoproject könyvtárból:


cd ~/myfirstdjangoenv/myfirstdjangoproject
python manage.py runserver 0.0.0.0:8000

Most nyissa meg a webböngészőt, és mutasson a http://ip-address:8000/admin elemre, majd jelentkezzen be az előző cikkben megadott hitelesítő adatokkal, és kezdjen el bejegyzést írni (ami ismét létrehoz egy Közzététel típusú objektumot, és beilleszti a kapcsolódó adatokat az alapul szolgáló adatbázisba):

Ismételje meg a folyamatot 2-3 alkalommal:

Miután elkészítettünk néhány bejegyzést, nézzük meg, mit kell tennünk ahhoz, hogy webböngészőnkkel megjelenítsük őket.

Kezdeti nézetünk

Az első nézetünk (~/myfirstdjangoenv/myfirstdjangoproject/myblog/views.py) lesz felelős az összes Bejegyzés objektum szűréséért, és visszaadja azokat, ahol a whenPublished értéke van. kisebb vagy egyenlő, mint az aktuális dátum és idő (whenPublished__lte=timezone.now()), csökkenő sorrendben whenPublished, ami megegyezik azzal, mintha „ a legfrissebb először“.

Ezeket az objektumokat a rendszer egy kényelmesen elnevezett bejegyzésekbe menti, és visszaküldi őket (összes bejegyzésként azonosítva), hogy beágyazzák őket a HTML-be, amint azt a következő részben látni fogjuk:


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})

Végül a fenti whenPublished__lte dupla aláhúzásjelével elválasztja az adatbázismezőt (whenPublished) egy szűrőtől vagy művelettől (lte=kevesebb, mint vagy egyenlő).

Miután meghatároztuk a kezdeti nézetünket, dolgozzunk a kapcsolódó sablonon.

Hozzon létre sablont első projektünkhöz

Az előző részben megadott utasításokat és útvonalakat követve a kezdeti sablonunkat a myblog/templates/myblog oldalon tároljuk. Ez azt jelenti, hogy létre kell hoznia egy sablonok nevű könyvtárat és egy myblog nevű alkönyvtárat:


cd ~/myfirstdjangoenv/myfirstdjangoproject/myblog
mkdir -p templates/myblog

Meghívjuk a posts.html sablont, és beillesztjük a következő kódot. Észreveheti, hogy online hivatkozásokat adunk a jQuery, a Bootstrap, a FontAwesome és a Google betűtípusokhoz.

Ezenkívül a Python kódot zárójelek közé helyeztük a HTML-ben. Kérjük, vegye figyelembe, hogy minden Post típusú objektumnál megjelenik a címe, a közzététel dátuma és a szerzője, végül pedig a szövege. Végül pirossal látni fogja, hogy a myblog/views.py oldalon visszaküldött objektumokra hivatkozunk:

Rendben, itt a posts.html fájl:


<!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>

A fenti sablonban a sortörés szűrő az egyszerű szövegben lévő sortöréseket a megfelelő HTML megfelelőre (
vagy

) helyettesíti. ) az egyes bejegyzések megfelelő formázásához a bekezdések elválasztásával.

Ezután be kell állítani egy leképezést az alkalmazásunkban található URL-ek és az adatokat visszaadó megfelelő nézetek között. Ehhez hozzon létre egy urls.py nevű fájlt a saját blogomban a következő tartalommal:


from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$', views.posts, name='posts'),
]

Az r'^$' megérdemel egy kicsit bővebb magyarázatot. A bevezető r arra utasítja a Djangot, hogy az idézőjelekben lévő karakterláncot reguláris kifejezésként kezelje.

Az r'^$' egy üres karakterláncot jelöl, így amikor a böngészőnket a http://ip-address:8000 címre irányítjuk (és semmi másra), a a views.py fájlban található posts változó által visszaadott adatok (lásd az előző részt) a kezdőlapunkon jelennek meg:

Végül, de nem utolsósorban a blogalkalmazásunk (~/myfirstdjangoenv/myfirstdjangoproject/myblog/urls.py) urls.py fájlját is belefoglaljuk a fő projektünk urls.py fájlja (~/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')),
]

Ezután indítsuk el a webszervert:


cd ~/myfirstdjangoenv/myfirstdjangoproject
python manage.py runserver 0.0.0.0:8000

Most már látnunk kell a korábban létrehozott bejegyzések listáját:

A Bootstrap-nek köszönhetően továbbra is kiváló vizualizációt készíthet egy kisebb eszközön:

Összegezve

Tekintsük át az ebben a cikkben és a sorozatban tárgyalt fogalmakat:

1. Mindegyik modell egy objektumot határoz meg, és egy adatbázistáblához rendeli, amelynek mezői az adott objektum tulajdonságaira vannak leképezve. Másrészt egy sablon határozza meg a felhasználói felületet, ahol a nézet által visszaadott adatok megjelennek.

Tegyük fel, hogy módosítani szeretnénk a modellünket úgy, hogy hozzáadunk egy összefoglaló nevű mezőt a Post objektumhoz, ahol az egyes bejegyzések opcionális rövid leírását tároljuk. Adjuk hozzá a következő sort a myblog/models.py fájlhoz:

summary = models.CharField(max_length=350, blank=True, null=True)

Amint azt az előző cikkben megtudtuk, a változtatásokat át kell helyeznünk az adatbázisba:


python manage.py makemigrations myblog
python manage.py migrate myblog

Ezután használja az adminisztrációs felületet a bejegyzések szerkesztéséhez, és minden bejegyzéshez adjon hozzá egy rövid összefoglalót. Végül cserélje ki a következő sort a sablonban (posts.html):

<p>{{ post.text|linebreaks }}</p>

val vel

<p>{{ post.summary }}</p>

A változások megtekintéséhez frissítse a kezdőlapot:

2. A view függvény fogad egy HTTP-kérést, és HTTP-választ ad vissza. Ebben a cikkben a def posts(request) views.py meghívja az alapul szolgáló adatbázist az összes bejegyzés lekéréséhez. Ha minden olyan bejegyzést le akarunk kérni, amelyeknek a címében szerepel az ansible szó, cseréljük le.

posts = Post.objects.filter(whenPublished__lte=timezone.now()).order_by('-whenPublished')

val vel

posts = Post.objects.filter(title__icontains="ansible").order_by('-whenPublished')

Azáltal, hogy a webes alkalmazásokban elválasztja a felhasználói felületet az alkalmazáslogikától, a Django megkönnyíti az alkalmazások karbantartásának és bővítésének feladatait.

3. Ha követte az ebben a sorozatban található utasításokat, a projekt felépítése a következő:


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

Ha a fenti lista nem jelenik meg megfelelően a böngészőben, itt van egy képernyőkép a következő parancs kimenetéről:


tree myfirstdjangoenv/myfirstdjangoproject

Összegzés

Bár ezek a fogalmak elsőre kissé ijesztőnek tűnhetnek, biztosíthatom önöket, hogy a Django megér minden erőfeszítést, hogy megismerje.

Remélem, hogy a példa, amellyel ebben a sorozatban bemutattuk ezt a kiváló webes keretrendszert, további tanulásra ösztönöz. Ha igen, akkor a hivatalos Django dokumentáció (amelyet folyamatosan frissítenek) a legjobb kiindulópont.

Biztosíthatom Önöket arról, hogy a Django sokkal többet tartalmaz, mint amennyit egy cikksorozatban kellőképpen leírhatunk, ezért nyugodtan fedezze fel, és tanuljon cselekvés közben!

Kérdéseivel vagy javaslataival nyugodtan írjon nekünk az alábbi űrlap segítségével.