ജാംഗോ ഫ്രെയിംവർക്ക് ഉപയോഗിച്ച് മൊബൈൽ-സൗഹൃദ വെബ് ആപ്ലിക്കേഷനുകൾ എങ്ങനെ സൃഷ്ടിക്കാം - ഭാഗം 3
ഈ സീരീസിന്റെ ഭാഗം 1-ൽ, ഒരു വെർച്വൽ പരിതസ്ഥിതിയിൽ ജാങ്കോ എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാമെന്നും കോൺഫിഗർ ചെയ്യാമെന്നും നിങ്ങൾ പഠിച്ചു, നിങ്ങളുടെ ആദ്യ പ്രോജക്റ്റിന്റെ അസ്ഥികൂടം നിങ്ങൾ സൃഷ്ടിച്ചു.
തുടർന്ന് ഭാഗം 2 ൽ ഞങ്ങൾ പോസ്റ്റ് ഒബ്uജക്റ്റുകൾക്കായി ഒരു ആപ്ലിക്കേഷനും ഒരു മോഡലും സൃഷ്ടിച്ചു, അത് പിന്നീട് ഞങ്ങൾ ഡാറ്റാബേസിലേക്ക് മൈഗ്രേറ്റ് ചെയ്തു. അവസാനമായി, നിങ്ങൾ പുതുതായി സൃഷ്ടിച്ച ആപ്ലിക്കേഷൻ ജാംഗോ അഡ്മിനിസ്ട്രേഷൻ യൂസർ ഇന്റർഫേസിലേക്ക് എങ്ങനെ സംയോജിപ്പിക്കാമെന്ന് ഞങ്ങൾ കാണിച്ചുതന്നു.
ഈ ലേഖനങ്ങൾ ജാംഗോ പരമ്പരയുടെ ഭാഗമാണ്:
ഈ അന്തിമ ഗൈഡിൽ, UI ഉപയോഗിച്ച് ആപ്ലിക്കേഷൻ എങ്ങനെ ആക്സസ് ചെയ്യാമെന്നും എല്ലാത്തരം ഉപകരണങ്ങൾക്കും അത് എങ്ങനെ മൊബൈൽ-സൗഹൃദമാക്കാമെന്നും ഞങ്ങൾ ചർച്ച ചെയ്യും. നമുക്ക് തുടങ്ങാം എന്ന് പറഞ്ഞു.
ജാംഗോ അഡ്uമിൻ ഇന്റർഫേസ് വഴി ഒബ്uജക്uറ്റുകൾ സൃഷ്uടിക്കുന്നു
പോസ്റ്റ് ടൈപ്പ് ഒബ്uജക്uറ്റുകൾ സൃഷ്uടിക്കാൻ (ഈ സീരീസിന്റെ രണ്ടാം ഭാഗം ഞങ്ങൾ നിർവചിച്ച മോഡൽ ഓർക്കുക), ഞങ്ങൾ ജാംഗോ അഡ്മിൻ ഇന്റർഫേസ് ഉപയോഗിക്കും.
ബാഹ്യ myfirstdjangoproject ഡയറക്uടറിയിൽ നിന്ന് ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിച്ച്, പോർട്ട് 8000 (അല്ലെങ്കിൽ നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന മറ്റൊന്ന്) ലാണ് Django ബിൽറ്റ്-ഇൻ വെബ് സെർവർ പ്രവർത്തിക്കുന്നതെന്ന് ഉറപ്പാക്കുക:
# cd ~/myfirstdjangoenv/myfirstdjangoproject # python manage.py runserver 0.0.0.0:8000
ഇപ്പോൾ നിങ്ങളുടെ വെബ് ബ്രൗസർ തുറന്ന് http://ip-address:8000/admin
എന്നതിലേക്ക് പോയിന്റ് ചെയ്യുക, തുടർന്ന് നിങ്ങൾ മുമ്പത്തെ ലേഖനത്തിൽ സജ്ജീകരിച്ച ക്രെഡൻഷ്യലുകൾ ഉപയോഗിച്ച് ലോഗിൻ ചെയ്uത് ഒരു പോസ്റ്റ് എഴുതാൻ തുടങ്ങുക (അത്, വീണ്ടും, പോസ്റ്റ് ടൈപ്പിന്റെ ഒരു ഒബ്uജക്റ്റ് സൃഷ്uടിക്കുകയും അനുബന്ധ ഡാറ്റ അടിസ്ഥാന ഡാറ്റാബേസിലേക്ക് ചേർക്കുകയും ചെയ്യും):
നടപടിക്രമം 2 അല്ലെങ്കിൽ 3 തവണ ആവർത്തിക്കുക:
ഞങ്ങൾ രണ്ട് പോസ്റ്റുകൾ സൃഷ്ടിച്ച ശേഷം, ഞങ്ങളുടെ വെബ് ബ്രൗസർ ഉപയോഗിച്ച് അവ പ്രദർശിപ്പിക്കുന്നതിന് എന്താണ് ചെയ്യേണ്ടതെന്ന് നോക്കാം.
ഞങ്ങളുടെ പ്രാരംഭ കാഴ്ച
ഞങ്ങളുടെ ആദ്യ കാഴ്uച (~/myfirstdjangoenv/myfirstdjangoproject/myblog/views.py) എല്ലാ പോസ്റ്റ് ഒബ്uജക്uറ്റുകളും ഫിൽട്ടർ ചെയ്യുന്നതിനും, എപ്പോൾ പ്രസിദ്ധീകരിച്ചതിന്റെ മൂല്യം നിലവിലെ തീയതിക്കും സമയത്തിനും (whenPublished__lte=timezone.now) കുറവോ തുല്യമോ ആണെങ്കിൽ അവ തിരികെ നൽകുന്നതിന്റെ ചുമതലയായിരിക്കും.()) ഏറ്റവും പുതിയത് ആദ്യം എന്ന് പറയുന്നതിന് തുല്യമായ, പ്രസിദ്ധീകരിക്കുമ്പോൾ അവരോഹണം ചെയ്തുകൊണ്ട് ക്രമീകരിച്ചു.
ഈ ഒബ്uജക്റ്റുകൾ സൗകര്യപ്രദമായി പേരിട്ടിരിക്കുന്ന പോസ്റ്റുകളായി സംരക്ഷിച്ചു, അടുത്ത വിഭാഗത്തിൽ നമ്മൾ കാണുന്നത് പോലെ, HTML-ൽ ഉൾച്ചേർക്കുന്നതിനായി തിരികെ (ഓൾപോസ്uറ്റുകളായി തിരിച്ചറിഞ്ഞു) നൽകുന്നു:
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})
അവസാനമായി, മുകളിലെ whenPublished__lte
എന്നതിലെ ഇരട്ട അണ്ടർസ്uകോർ ഒരു ഫിൽട്ടറിൽ നിന്നോ പ്രവർത്തനത്തിൽ നിന്നോ (lte = അതിൽ കുറവോ തുല്യമോ) ഒരു ഡാറ്റാബേസ് ഫീൽഡ് (പ്രസിദ്ധീകരിച്ചപ്പോൾ) വേർതിരിക്കുന്നതിന് ഉപയോഗിക്കുന്നു.
ഞങ്ങളുടെ പ്രാരംഭ കാഴ്ച നിർവചിച്ചുകഴിഞ്ഞാൽ, അനുബന്ധ ടെംപ്ലേറ്റിൽ പ്രവർത്തിക്കാം.
ഞങ്ങളുടെ ആദ്യ പ്രോജക്റ്റിനായി ടെംപ്ലേറ്റ് സൃഷ്ടിക്കുക
മുമ്പത്തെ വിഭാഗത്തിൽ നൽകിയിരിക്കുന്ന നിർദ്ദേശങ്ങളും പാതകളും പിന്തുടർന്ന്, ഞങ്ങൾ ഞങ്ങളുടെ പ്രാരംഭ ടെംപ്ലേറ്റ് myblog/templates/myblog എന്നിവയിൽ സംഭരിക്കും. ടെംപ്ലേറ്റുകൾ എന്ന പേരിൽ ഒരു ഡയറക്ടറിയും myblog എന്ന ഉപഡയറക്uടറിയും നിങ്ങൾ സൃഷ്uടിക്കണമെന്നാണ് ഇതിനർത്ഥം.
# cd ~/myfirstdjangoenv/myfirstdjangoproject/myblog # mkdir -p templates/myblog
ഞങ്ങൾ ടെംപ്ലേറ്റിനെ posts.html
എന്ന് വിളിക്കുകയും അതിൽ ഇനിപ്പറയുന്ന കോഡ് ചേർക്കുകയും ചെയ്യും. jQuery, Bootstrap, FontAwesome, Google ഫോണ്ടുകൾ എന്നിവയിലേക്ക് ഞങ്ങൾ ഓൺലൈൻ റഫറൻസുകൾ ചേർക്കുന്നത് നിങ്ങൾ ശ്രദ്ധിക്കും.
കൂടാതെ, HTML-നുള്ളിൽ ചുരുണ്ട ബ്രാക്കറ്റുകൾക്കുള്ളിൽ ഞങ്ങൾ പൈത്തൺ കോഡ് ഉൾപ്പെടുത്തിയിട്ടുണ്ട്. പോസ്റ്റ് ടൈപ്പിന്റെ ഓരോ ഒബ്uജക്റ്റിനും ഞങ്ങൾ അതിന്റെ ശീർഷകം, പ്രസിദ്ധീകരിച്ച തീയതി, രചയിതാവ് എന്നിവയും ഒടുവിൽ അതിന്റെ വാചകവും കാണിക്കുമെന്നത് ശ്രദ്ധിക്കുക. അവസാനമായി, myblog/views.py വഴി തിരിച്ചുനൽകിയ ഒബ്uജക്uറ്റുകളിലേക്ക് ഞങ്ങൾ ഒരു റഫറൻസ് നടത്തുന്നതായി ചുവപ്പ് നിറത്തിൽ നിങ്ങൾ കാണും:
ശരി, 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>
മുകളിലെ ടെംപ്ലേറ്റിൽ, ഓരോന്നിനും ഫോർമാറ്റ് ചെയ്യുന്നതിനായി, പ്ലെയിൻ ടെക്സ്റ്റിലെ ലൈൻ ബ്രേക്കുകൾക്ക് അനുബന്ധമായ HTML തുല്യമായ (
അല്ലെങ്കിൽ
അടുത്തതായി, ഞങ്ങളുടെ ആപ്ലിക്കേഷനിലെ URL-കൾക്കും ഡാറ്റ നൽകുന്ന അനുബന്ധ കാഴ്ചകൾക്കും ഇടയിൽ ഒരു മാപ്പിംഗ് സജ്ജീകരിക്കേണ്ടതുണ്ട്. അങ്ങനെ ചെയ്യുന്നതിന്, ഇനിപ്പറയുന്ന ഉള്ളടക്കം ഉപയോഗിച്ച് myblog-നുള്ളിൽ urls.py എന്ന പേരിൽ ഒരു ഫയൽ സൃഷ്ടിക്കുക:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.posts, name='posts'), ]
r^$
കുറച്ചുകൂടി വിശദീകരണം അർഹിക്കുന്നു. മുൻനിര r
സിംഗിൾ ഉദ്ധരണികൾക്കുള്ളിലെ സ്ട്രിംഗ് ഒരു സാധാരണ പദപ്രയോഗമായി പരിഗണിക്കാൻ ജാങ്കോയോട് നിർദ്ദേശിക്കുന്നു.
പ്രത്യേകിച്ചും, r^$
എന്നത് ഒരു ശൂന്യമായ സ്uട്രിംഗിനെ പ്രതിനിധീകരിക്കുന്നു, അതിനാൽ ഞങ്ങൾ ബ്രൗസറിനെ http://ip-address:8000
(മറ്റൊന്നുമില്ല) എന്നതിലേക്ക് ചൂണ്ടിക്കാണിച്ചാൽ, ഡാറ്റ തിരികെ ലഭിക്കും. views.py
എന്നതിനുള്ളിലെ വേരിയബിൾ പോസ്റ്റുകൾ വഴി (മുമ്പത്തെ വിഭാഗം കാണുക) ഞങ്ങളുടെ ഹോം പേജിൽ അവതരിപ്പിക്കും:
അവസാനമായി, എന്നാൽ ഏറ്റവും കുറഞ്ഞത്, ഞങ്ങളുടെ പ്രധാന പ്രോജക്റ്റിന്റെ (~/myfirstdjangoenv/myfirstdjangoproject/myfirstdjangoproject/myfirstdjangoproject/project/projecturls.py) ഞങ്ങളുടെ ബ്ലോഗ് ആപ്ലിക്കേഷന്റെ (~/myfirstdjangoenv/myfirstdjangoproject/myblog/urls.py) urls.py ഫയൽ ഞങ്ങൾ ഉൾപ്പെടുത്തും. .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')), ]
അപ്പോൾ നമുക്ക് വെബ് സെർവർ ആരംഭിക്കാം:
# cd ~/myfirstdjangoenv/myfirstdjangoproject # python manage.py runserver 0.0.0.0:8000
ഞങ്ങൾ മുമ്പ് സൃഷ്uടിച്ച പോസ്റ്റുകളുടെ ലിസ്uറ്റുകൾ ഇപ്പോൾ നമുക്ക് കാണാൻ കഴിയും:
ബൂട്ട്uസ്uട്രാപ്പിന് നന്ദി, നിങ്ങൾക്ക് ഇപ്പോഴും ഒരു ചെറിയ ഉപകരണത്തിൽ മികച്ച ദൃശ്യവൽക്കരണം നടത്താനാകും:
സംഗ്രഹിക്കുന്നു
ഈ ലേഖനത്തിലും ഈ പരമ്പരയിലുടനീളം ഞങ്ങൾ ഉൾപ്പെടുത്തിയ ആശയങ്ങൾ ഇപ്പോൾ അവലോകനം ചെയ്യാം:
1. ഓരോ മോഡലും ഒരു വസ്തുവിനെ നിർവചിക്കുകയും ഒരു ഡാറ്റാബേസ് ടേബിളിലേക്ക് മാപ്പ് ചെയ്യുകയും ചെയ്യുന്നു, അതിന്റെ ഫീൽഡുകൾ ആ വസ്തുവിന്റെ സവിശേഷതകളിലേക്ക് മാപ്പ് ചെയ്യുന്നു. മറുവശത്ത്, ഒരു ടെംപ്ലേറ്റ് ഉപയോക്തൃ ഇന്റർഫേസ് നിർവചിക്കുന്നു, അവിടെ കാഴ്ച നൽകുന്ന ഡാറ്റ പ്രദർശിപ്പിക്കും.
പോസ്റ്റ് ഒബ്uജക്uറ്റിലേക്ക് സംഗ്രഹം എന്ന് പേരുള്ള ഒരു ഫീൽഡ് ചേർത്ത് ഞങ്ങളുടെ മോഡൽ പരിഷ്uക്കരിക്കാൻ ആഗ്രഹിക്കുന്നുവെന്ന് പറയാം, അവിടെ ഓരോ പോസ്റ്റിന്റെയും ഓപ്uഷണൽ ഹ്രസ്വ വിവരണം ഞങ്ങൾ സംഭരിക്കും. myblog/models.py എന്നതിൽ ഇനിപ്പറയുന്ന വരി ചേർക്കാം:
summary = models.CharField(max_length=350, blank=True, null=True)
മുമ്പത്തെ ലേഖനത്തിൽ ഞങ്ങൾ പഠിച്ചതുപോലെ, ഡാറ്റാബേസിലേക്ക് മാറ്റങ്ങൾ മൈഗ്രേറ്റ് ചെയ്യേണ്ടതുണ്ട്:
# python manage.py makemigrations myblog # python manage.py migrate myblog
തുടർന്ന് അഡ്uമിൻ ഇന്റർഫേസ് ഉപയോഗിച്ച് പോസ്റ്റുകൾ എഡിറ്റ് ചെയ്യാനും ഓരോ പോസ്റ്റിനും ഒരു ഹ്രസ്വ സംഗ്രഹം ചേർക്കാനും. അവസാനമായി, ടെംപ്ലേറ്റിലെ ഇനിപ്പറയുന്ന വരി മാറ്റിസ്ഥാപിക്കുക (posts.html):
<p>{{ post.text|linebreaks }}</p>
കൂടെ
<p>{{ post.summary }}</p>
മാറ്റങ്ങൾ കാണുന്നതിന് ഹോം പേജ് പുതുക്കുക:
2. ഒരു വ്യൂ ഫംഗ്uഷൻ ഒരു HTTP അഭ്യർത്ഥന എടുക്കുകയും ഒരു HTTP പ്രതികരണം നൽകുകയും ചെയ്യുന്നു. ഈ ലേഖനത്തിൽ, views.py ലെ def posts(അഭ്യർത്ഥന) എല്ലാ പോസ്റ്റുകളും വീണ്ടെടുക്കുന്നതിന് അടിസ്ഥാന ഡാറ്റാബേസിലേക്ക് ഒരു കോൾ ചെയ്യുന്നു. തലക്കെട്ടിൽ ansible എന്ന വാക്ക് ഉള്ള എല്ലാ പോസ്റ്റുകളും വീണ്ടെടുക്കണമെങ്കിൽ, ഞങ്ങൾ മാറ്റിസ്ഥാപിക്കേണ്ടതാണ്.
posts = Post.objects.filter(whenPublished__lte=timezone.now()).order_by('-whenPublished')
കൂടെ
posts = Post.objects.filter(title__icontains="ansible").order_by('-whenPublished')
വെബ് ആപ്ലിക്കേഷനുകളിലെ ആപ്ലിക്കേഷൻ ലോജിക്കിൽ നിന്ന് ഉപയോക്തൃ ഇന്റർഫേസിനെ വേർതിരിക്കുന്നതിലൂടെ, ആപ്പുകൾ പരിപാലിക്കുന്നതിനും വർദ്ധിപ്പിക്കുന്നതിനുമുള്ള ചുമതലകൾ ജാങ്കോ സുഗമമാക്കുന്നു.
3. ഈ ശ്രേണിയിൽ നൽകിയിരിക്കുന്ന നിർദ്ദേശങ്ങൾ നിങ്ങൾ പിന്തുടരുകയാണെങ്കിൽ, നിങ്ങളുടെ പ്രോജക്റ്റിന്റെ ഘടന ഇനിപ്പറയുന്നതായിരിക്കണം:
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
നിങ്ങളുടെ ബ്രൗസറിൽ മുകളിലെ ലിസ്റ്റ് ശരിയായി ദൃശ്യമാകുന്നില്ലെങ്കിൽ, ഇനിപ്പറയുന്ന കമാൻഡിന്റെ ഔട്ട്പുട്ടിന്റെ ഒരു സ്ക്രീൻഷോട്ട് ഇതാ:
# tree myfirstdjangoenv/myfirstdjangoproject
സംഗ്രഹം
ഈ ആശയങ്ങളെല്ലാം ആദ്യം അൽപ്പം ഭയപ്പെടുത്തുന്നതായി തോന്നുമെങ്കിലും, ജാങ്കോയെ പരിചയപ്പെടാൻ ആവശ്യമായ എല്ലാ ശ്രമങ്ങൾക്കും അർഹതയുണ്ടെന്ന് എനിക്ക് ഉറപ്പുനൽകാൻ കഴിയും.
ഈ മികച്ച വെബ് ഫ്രെയിംവർക്കിലേക്ക് നിങ്ങളെ പരിചയപ്പെടുത്താൻ ഈ പരമ്പരയിൽ ഞങ്ങൾ ഉപയോഗിച്ച ഉദാഹരണം നിങ്ങളെ കൂടുതലറിയാൻ പ്രേരിപ്പിക്കുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു. അങ്ങനെയെങ്കിൽ, ഔദ്യോഗിക ജാങ്കോ ഡോക്യുമെന്റേഷൻ (ഇത് നിരന്തരം അപ് ടു ഡേറ്റ് ആയി സൂക്ഷിക്കുന്നു) ആണ് ആരംഭിക്കാനുള്ള ഏറ്റവും നല്ല സ്ഥലം.
ലേഖനങ്ങളുടെ ഒരു പരമ്പരയിൽ ഞങ്ങൾക്ക് വേണ്ടത്ര കവർ ചെയ്യാൻ കഴിയുന്നതിനേക്കാൾ കൂടുതൽ കാര്യങ്ങൾ ജാംഗോയിൽ ഉണ്ടെന്ന് എനിക്ക് ഉറപ്പ് നൽകാൻ കഴിയും, അതിനാൽ അത് പര്യവേക്ഷണം ചെയ്ത് പഠിക്കാൻ മടിക്കേണ്ടതില്ല!
ചുവടെയുള്ള ഫോം ഉപയോഗിച്ച് ചോദ്യങ്ങളോ നിർദ്ദേശങ്ങളോ ഉള്ള ഒരു കുറിപ്പ് ഞങ്ങൾക്ക് ഇടാൻ മടിക്കേണ്ടതില്ല.