วันพฤหัสบดีที่ 28 กุมภาพันธ์ พ.ศ. 2562

django==1.10 ตอน 1

ติดตั้ง Django Framework

pip install django==1.10

สร้าง Django Project

# django-admin startproject [project-name]
django-admin startproject first_project

เมื่อทำการสร้างแล้วเราจะได้โครงสร้าง Project แบบนี้ครับ
/ first_project
|
|--/ first_project
|  |-- __init__.py # ไฟล์เปล่า เพื่อให้ Python รู้ว่าเป็นโฟลเดอร์แพ็กเกจ
|  |-- settings.py # ไฟล์ที่เก็บค่า Setting เกี่ยวกับ Project ไว้
|  |-- urls.py     # ไฟล์ที่เก็บข้อมูลเกี่ยวกับ URL Mapping
|  |-- wsgi.py     # ไฟล์ที่ใช้งานตอน Deployment
|
|-- manage.py # ไฟล์จัดการต่างๆ เช่น run server, create application

ทดสอบว่าทำงานได้ปกติโดยการใช้คำสั่ง runserver ใน Folder Project
python manage.py runserver



สร้าง Django Application

Django Project เราสามารถเพิ่ม Application เข้าไปได้หลายตัว
# python manage.py startapp [application-name]
python manage.py startapp first_app

เมื่อสร้างแล้วจะได้โฟลเดอร์ Application เพิ่มเข้ามาโครงสร้างแบบนี้
/ first_app
|--/ migrations # เก็บข้อมูล database ที่ใช้กับ data models
|
|-- __init__.py # ไฟล์เปล่า เพื่อให้ Python รู้ว่าเป็นโฟลเดอร์แพ็กเกจ
|-- admin.py  # ไฟล์ข้อมูล models เพื่อให้ Django ใช้กับ admin interface
|-- apps.py   # ไฟล์ข้อมูล application เพื่อตั้งค่าต่างๆ
|-- models.py # ไฟล์ข้อมูล data models
|-- tests.py  # ไฟล์เก็บ function ที่ใช้ในการทดสอบ
|-- views.py  # ไฟล์เก็บ function จัดการ request และ response

เมื่อทำการสร้าง first_app แล้วให้แก้ไขไฟล์ views.py เพื่อไว้ครูก่อน
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
   return HttpResponse("Hello World!")

เสร็จแล้วให้ไปเพิ่มข้อมูลที่ไฟล์ settings.py และ urls.py ใน Project folder
INSTALLED_APPS = [
   ...,
   'first_app'
]
...
from django.conf.urls import url
from first_app import views

urlpatterns = [
   ...
   url(r'^$', views.index, name='index'),
]



การทำ URL Mappings

ตัวอย่างนี้เป็นสร้างไฟล์ urls.py ที่ Application เพื่อให้เราไม่ต้องไปเพิ่มข้อมูลไฟล์ urls.py ที่ตัว Project ทุกครั้งที่สร้าง method ใหม่
สร้างไฟล์ urls.py ใน Application folder
from django.conf.urls import url
from first_app import views

urlpatterns = [
  url(r'^$', views.index, name='index'),
]

เปิดไฟล์ urls.py ใน Project folder เพื่อเพิ่มข้อมูล url mapping ของ Application ลงไป
...
from django.conf.urls import include, url

urlpatterns = [ 
   ...
   url(r'^first_app/', include('first_app.urls')),
]
...



การใช้งาน Template และ Static

สร้าง Templates folder ใน Project folder และสร้าง Application folder ข้างใน Templates folder อีกที จะได้หน้าตาประมาณนี้

/ first_project
|--/ first_app
|--/ first_project
|--/ templates
|  |--/ first_app
|     |-- index.html # Template file with Django template tag

แก้ไขไฟล์ settings.py ใน Project folder เพิ่มตัวแปร TEMPLATE_DIR และเพิ่มข้อมูลที่ TEMPLATE = []
...
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR = os.path.join(BASE_DIR,"templates")
...

TEMPLATES = [
   {
      'BACKEND': 'django.template.backends.django.DjangoTemplates',
      'DIRS': [TEMPLATE_DIR],
      'APP_DIRS': True,
      'OPTIONS': {
         'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
         ],
      },
   },
]
...

เสร็จแล้วสร้างไฟล์ index.html ใน Templates folder
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>First Apps</title>
  </head>
  <body>
    <h1>Hello this is index.html</h1>
    {{ insert_me }}

  </body>
</html>

แก้ไขไฟล์ views.py ใน Application folder
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    my_dict = {'insert_me': "Hello I am from views.py"}
    return render(request, 'first_app/index.html', context=my_dict)
สร้าง Static folder และ Images folder ไว้ข้างใน เสร็จแล้วแก้ไขไฟล์ settings.py เพิ่มตัวแปร STATIC_DIR และข้อมูล STATICFILES_DIRS =[]
...
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR = os.path.join(BASE_DIR,"templates")
STATIC_DIR = os.path.join(BASE_DIR, "static")
...
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    STATIC_DIR,
]
...

แก้ไข Template file เพื่อให้โหลดไฟล์ Static ได้
<!DOCTYPE html>
{% load staticfiles %}
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Django Static File</title>
  </head>
  <body>
    <h1>Hi, this is a picture of Django himself!</h1>
    <img src="{% static "images/static.jpg" %}" alt="">

  </body>
</html>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น