Bii o ṣe Ṣẹda Awọn ohun elo Wẹẹbu Ọrẹ Alagbeka nipa lilo Framework Django - Apakan 3


Ninu Apakan 1 ti jara yii o kọ bi o ṣe le fi sori ẹrọ ati tunto Django ni agbegbe ti o foju kan ati pe o ṣẹda egungun ti iṣẹ akọkọ rẹ.

Lẹhinna ni Apakan 2 a ṣẹda ohun elo kan ati awoṣe fun awọn nkan Ifiranṣẹ, eyiti a nigbamii lọ si aaye data. Lakotan, a fihan ọ bi o ṣe le ṣepọ ohun elo tuntun ti a ṣẹda si wiwo olumulo olumulo Django.

Awọn nkan wọnyi jẹ apakan ti jara Django:

Ninu itọsọna ipari yii a yoo jiroro bii o ṣe le wọle si ohun elo nipa lilo UI ati bii o ṣe le ṣe ọrẹ-alagbeka fun gbogbo iru awọn ẹrọ. Ti o sọ, jẹ ki a bẹrẹ.

Ṣiṣẹda awọn nkan nipasẹ wiwo abojuto Django

Lati ṣẹda awọn nkan ti iru Post (ranti iyẹn ni awoṣe ti a ṣalaye ni Apakan 2 ti jara yii), a yoo lo wiwo abojuto Django.

Rii daju pe olupin ayelujara ti a ṣe sinu Django nṣiṣẹ lori ibudo 8000 (tabi omiiran ti o yan) nipasẹ ṣiṣe pipaṣẹ wọnyi lati itọsọna myfirstdjangoproject lode:

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

Bayi ṣii ẹrọ aṣawakiri wẹẹbu rẹ ki o tọka si http:// ip-adirẹsi: 8000/abojuto , lẹhinna wọle nipa lilo awọn iwe eri ti o ṣeto ninu nkan ti tẹlẹ ki o bẹrẹ kikọ ifiweranṣẹ kan (eyiti, lẹẹkansi, yoo ṣẹda ohun ti iru Post ki o fi sii data ti o ni nkan sinu aaye data ipilẹ):

Tun ilana naa ṣe ni awọn akoko 2 tabi 3:

Lẹhin ti a ti ṣẹda awọn ifiweranṣẹ meji, jẹ ki a wo ohun ti a nilo lati ṣe lati ṣe afihan wọn nipa lilo ẹrọ lilọ kiri ayelujara wa.

Wiwo akọkọ wa

Wiwo akọkọ wa (~/myfirstdjangoenv/myfirstdjangoproject/myblog/views.py) yoo wa ni idiyele sisẹ gbogbo awọn nkan Ifiranṣẹ ati dapada awọn ibi ti iye ti nigba ti A tẹjade kere ju tabi dọgba si ọjọ ati akoko lọwọlọwọ (nigbatiPublished__lte = timezone.now)()) paṣẹ nipasẹ sisalẹ nigbati a tẹjade, eyiti o jẹ kanna bi sisọ “titun akọkọ”.

Awọn nkan wọnyi ni a fi pamọ sinu oniwa oniwa ti a npè ni irọrun, ati pe wọn pada (ti a mọ bi allposts) lati wa ni ifibọ ninu HTML, gẹgẹbi a yoo rii ni abala atẹle:

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

Lakotan, iṣẹ abẹ meji ni nigbatiPublished__lte loke wa ni lilo lati ya aaye aaye data kan (nigbati A tẹjade) lati inu àlẹmọ kan tabi iṣẹ kan (lte = kere ju tabi dọgba).

Ni kete ti a ti ṣalaye wiwo akọkọ wa, jẹ ki a ṣiṣẹ lori awoṣe ti o ni nkan.

Ṣẹda Àdàkọ fun Project wa akọkọ

Ni atẹle awọn itọsọna ati awọn ọna ti a fun ni apakan ti tẹlẹ, a yoo tọju awoṣe akọkọ wa ninu myblog/awọn awoṣe/myblog. Eyi tumọ si pe iwọ yoo nilo lati ṣẹda itọsọna kan ti a npè ni awọn awoṣe ati itọsọna kekere ti a pe ni myblog:

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

A yoo pe awoṣe posts.html ki o fi sii koodu atẹle ni inu rẹ. Iwọ yoo ṣe akiyesi pe a n ṣe afikun awọn itọkasi lori ayelujara si jQuery, Bootstrap, FontAwesome, ati awọn nkọwe Google.

Ni afikun, a ti ni koodu Python ti o wa ninu awọn akọmọ iṣupọ inu HTML. Jọwọ ṣe akiyesi pe fun gbogbo nkan ti iru Post a yoo fi akọle rẹ han, ọjọ ti a tẹjade ati onkọwe, ati nikẹhin ọrọ rẹ. Lakotan, ni pupa iwọ yoo rii pe a ṣe itọkasi awọn nkan ti a pada nipasẹ myblog/views.py:

O dara, eyi ni faili posts.html:

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

Ninu awoṣe ti o wa loke, a lo àlẹmọ laini ila lati rọpo awọn fifọ laini ni ọrọ pẹtẹlẹ pẹlu deede HTML ti o baamu (
tabi

) lati ṣe kika ọkọọkan firanṣẹ daradara pẹlu ipinya ipinya.

Nigbamii ti, a nilo lati ṣeto aworan agbaye laarin awọn URL ninu ohun elo wa ati awọn wiwo ti o baamu ti o da data naa pada. Lati ṣe bẹ, ṣẹda faili kan ti a npè ni urls.py inu myblog pẹlu akoonu atẹle:

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

r ^$ yẹ alaye diẹ diẹ sii. Olumulo r kọ Django lati ṣe itọju okun inu awọn agbasọ ẹyọkan bi ikosile deede.

Ni pataki, r ^$ duro fun okun ti o ṣofo nitori pe nigba ti a tọka aṣawakiri wa si http:// ip-adirẹsi: 8000 (ati pe ko si nkan miiran), data naa pada nipasẹ awọn ifiweranṣẹ iyipada inu awọn wiwo.py (tọka si apakan ti tẹlẹ) yoo gbekalẹ ni oju-iwe ile wa:

Kẹhin, ṣugbọn kii kere ju, a yoo pẹlu faili urls.py ti ohun elo bulọọgi wa (~/myfirstdjangoenv/myfirstdjangoproject/myblog/urls.py) sinu urls.py ti iṣẹ akọkọ wa (~/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')),
]

Lẹhinna jẹ ki a bẹrẹ olupin ayelujara:

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

O yẹ ki a ni anfani bayi lati wo awọn atokọ ti awọn ifiweranṣẹ ti a ṣẹda tẹlẹ:

Ṣeun si Bootstrap, o tun le ni iworan ti o dara julọ ninu ẹrọ kekere:

Summing Up

Jẹ ki a ṣe atunyẹwo awọn imọran ti a ti bo ninu nkan yii ati jakejado jara yii:

1. Awoṣe kọọkan ṣalaye nkan ati awọn maapu si tabili ibi ipamọ data kan, ti awọn aaye rẹ ni ọna maapu si awọn ohun-ini ohun naa. Ni apa keji, awoṣe kan ṣalaye wiwo olumulo nibiti data ti o pada nipasẹ wiwo yoo han.

Jẹ ki a sọ pe a fẹ ṣe atunṣe awoṣe wa nipa fifi aaye kan ti a npè ni akopọ si nkan Ifiranṣẹ, nibi ti a yoo tọju apejuwe ṣoki aṣayan ti ifiweranṣẹ kọọkan. Jẹ ki a ṣafikun laini atẹle ni myblog/awọn awoṣe.py:

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

Gẹgẹbi a ti kọ ninu nkan ti tẹlẹ, a nilo lati jade awọn ayipada si ibi ipamọ data:

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

Lẹhinna lo wiwo abojuto lati satunkọ awọn ifiweranṣẹ ati ṣafikun akopọ ṣoki si ifiweranṣẹ kọọkan. Lakotan, rọpo ila atẹle ni awoṣe (posts.html):

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

pẹlu

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

Sọ oju-iwe ile wo awọn ayipada:

2. Iṣẹ iwoye gba ibeere HTTP ati dapada idahun HTTP kan. Ninu àpilẹkọ yii, awọn ifiweranṣẹ (ibeere) ni awọn iwo.py ṣe ipe si ipilẹ data ipilẹ lati gba gbogbo awọn ifiweranṣẹ pada. Ti a ba fẹ gba gbogbo awọn ifiweranṣẹ pada pẹlu ọrọ ti o ni ẹtọ ninu akọle, o yẹ ki a rọpo.

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

pẹlu

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

Nipa yiya sọtọ wiwo olumulo lati inu ohun elo ni awọn ohun elo wẹẹbu, Django dẹrọ awọn iṣẹ ṣiṣe ti mimu ati awọn ohun elo ti n dagba sii.

3. Ti o ba tẹle awọn itọnisọna ti a pese ni jara yii, eto ti idawọle rẹ yẹ ki o jẹ atẹle:

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

Ti o ba jẹ pe akojọ ti o wa loke ko han ni deede ninu ẹrọ aṣawakiri rẹ, eyi ni sikirinifoto ti o wu ti aṣẹ atẹle:

# tree myfirstdjangoenv/myfirstdjangoproject

Akopọ

Botilẹjẹpe gbogbo awọn imọran wọnyi le dabi ohun idẹruba diẹ ni akọkọ, Mo le da ọ loju pe Django tọsi daradara gbogbo awọn ipa ti o ṣe pataki lati di ojulumọ pẹlu rẹ

Mo nireti pe apẹẹrẹ ti a ti lo ninu jara yii lati ṣafihan ọ si ilana oju opo wẹẹbu ti o tayọ yii yoo ru ọ niyanju lati ni imọ siwaju sii. Ti o ba bẹ bẹ, iwe aṣẹ Django osise (eyiti o jẹ imudojuiwọn nigbagbogbo) jẹ aaye ti o dara julọ lati bẹrẹ.

Mo le ṣe idaniloju fun ọ pe ọpọlọpọ diẹ sii wa si Django ju ti a le bo lọ ni deede ni lẹsẹsẹ awọn nkan, nitorinaa ni ọfẹ lati ṣawari rẹ ki o kọ ẹkọ nipa ṣiṣe!

Ni ominira lati sọ akọsilẹ wa silẹ pẹlu awọn ibeere tabi awọn didaba ni lilo fọọmu ni isalẹ.