Django – Tạo project Django


Được đăng vào ngày 23/03/2016 | 7 bình luận
Django – Tạo project Django
4.6 (91.11%) 9 votes

Trong phần này chúng ta sẽ bắt đầu học cách tạo một ứng dụng web bằng django.

Tạo project

C:\Project>django-admin startproject mysite

Để tạo một project Django thì bạn mở Command Prompt (cmd) lên và chuyển đến thư mục mà bạn muốn tạo, sau đó gõ đoạn lệnh phía trên, ở trên chúng ta tạo một project với tên là mysite. Lệnh startproject sẽ tạo một thư mục có tên là mysite, cấu trúc bên trong thư mục sẽ như thế này:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

Chúng ta sẽ từ từ tìm hiểu các file này sau.

Khi đặt tên project bạn tránh đặt những tên trùng với các từ khóa có sẵn trong Python như sys, os, django…. để tránh bị xung đột.

Làm web trong Python Django không giống với các ngôn ngữ khác như PHP, ASP.NET hay Java… bạn phải cài sẵn một web server (như Apache hoặc IIS…) trên máy và cài các phần mềm đi kèm trên web server đó, sau đó bạn viết code và bỏ vào thư mục gốc của web server (vd như www hay htdocs…), mỗi ứng dụng web Django tự chạy một server cho chính nó, do đó bạn có thể đặt code của bạn ở bất kỳ đâu mà bạn muốn.

Chạy server

Thư mục mysite có chức năng tương tự như thư mục gốc trong các web server khác như www hay htdocs… bên trong thư mục này có chứa một file tên là manage.py, file này cung cấp các chức năng để bạn vận hành server của bạn.

C:\Project\mysite>python manage.py runserver

Để chạy server thì bạn chạy file manage.py và đưa vào tham số runserver.

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

March 21, 2016 - 15:50:53
Django version 1.9, using settings 'mysite.settings'
Starting development server at <a class="reference external" href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a>
Quit the server with CTRL-BREAK.

Chúng ta đã chạy một web server viết bằng Python. Mặc định Django server sẽ chạy trên cổng 8000 (chúng ta có thể cấu hình để server chạy trên một cổng khác).

Capture

Bạn có thể vào trình duyệt và trỏ đường dẫn đến 127.0.0.1:8000 hoặc localhost:8000 để xem thông báo của server.

Để đổi port mặc định của server thì bạn thêm số port mà bạn muốn sau tham số runserver.

C:\Project\mysite>python manage.py runserver 8080

Đoạn code trên sẽ chạy server trên port 8080.

Cũng giống như các web server khác, vì Python cũng là một ngôn ngữ thông dịch nên khi bạn viết code xong và bấm save, muốn test thì bạn chỉ cần refresh lại trang web trên trình duyệt là sẽ thấy sự thay đổi, bạn không cần phải khởi động lại server làm gì.

Tạo web app

Những gì chúng ta vừa làm ở trên là tạo một webserver cho project của chúng ta. Bây giờ chúng ta sẽ tạo ứng dụng web trên server này.

C:\Project\mysite>python manage.py startapp polls

Bạn mở một trình Command Prompt khác lên và trỏ đến thư mục chứa file manage.py, sau đó chạy file này với tham số startapp để tạo một ứng dụng web, ở đây chúng ta tạo một ứng dụng web với tên là polls, nếu như bạn chưa biết thì đây là một ứng dụng đặt câu hỏi và cho phép người dùng trả lời trắc nghiệm, thường dùng để làm các chương trình khảo sát người dùng… đây sẽ là ứng dụng mà chúng ta làm trong những bài đầu tiên.

Một thư mục với tên polls sẽ được tạo ra và có cấu trúc như sau:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Thư mục này chứa các file chuẩn của một ứng dụng web Django.

Sự khác nhau giữa một Project và một Web App là project thì bao gồm nhiều app, trong đó mỗi app thực hiện một công việc riêng biệt.

Tạo View

Trong thư mục polls có chứa một file tên là views.py, bản chất thì file này giống như một file .php, .asp… trong các ngôn ngữ khác vậy.

from django.http import HttpResponse

def index(request):
    response = HttpResponse()
    response.write("<h1>Welcome</h1>")
    response.write("This is the polls app")
    return response

Bên trong file views.py này chúng ta viết hàm index, hàm này trả về một đối tượng HttpResponse. Để gọi được tới hàm index này và lấy nội dung HTML thì chúng ta phải tạo đường dẫn URL tới file này.

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py
Để tạo URL chúng ta tạo một file với tên urls.py bên trong thư mục polls.
from django.conf.urls import url 

from . import views 

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

Bên trong file urls.py chúng ta khai báo một đối tượng List có tên urlpatterns, Django sẽ tìm thông tin về các url trong list này, list này chứa các đối tượng url, mỗi url bao gồm 3 tham số, tham số thứ nhất là biểu thức chính quy (Regex – Regular Expression), tham số thứ hai là tên module và tên hàm sẽ trả về nội dung HTML, ở đây là hàm index trong module views (file views.py), tham số thứ 3 là tên biến toàn cục trong toàn bộ ứng dụng, trong đó 2 tham số đầu tiên là bắt buộc phải có.

Regex (biểu thức chính quy) là một chủ đề khá lớn, Regex cho phép chúng ta tạo ra các mẫu định dạng text dùng trong tìm kiếm, xác thực… ở đây Regex giúp tạo các đường dẫn tới các hàm trả về nội dung HTML một cách tự động. Để tạo các chuỗi Regex thì có một số quy luật sau đây:

  • ^ – bắt đầu regex
  • $ – kết thúc regex
  • \d – một kí tự số
  • + –  kí tự phía trước có thể lặp lại một hoặc nhiều lần
  • / – có một dấu /
  • () – gom nhóm một số kí tự nhất định lại với nhau

Chúng ta sẽ tìm hiểu thêm về Regex sau. Đối với trường hợp của chúng ta thì Regex chỉ đơn giản là ^$, tức là đường dẫn trắng, không có gì cả, khi nhập đường dẫn này thì trả về nội dung từ hàm views.index.

Sau khi đã có đường dẫn cho riêng polls, thì tiếp theo chúng ta phải tạo đường dẫn đến ứng dụng polls này nữa, chúng ta sẽ tạo đường dẫn cho từng ứng dụng trong file mysite/urls.py.

from django.conf.urls import include, url
from django.contrib import admin 

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

Bên trong file mysite/urls.py cũng có một list urlpatterns, list này chứa các đối tượng url dẫn đến các ứng dụng web khác mà chúng ta viết.

Ở đây tham số thứ 2 chúng ta không chỉ đến một hàm index nào đó trong một module nào đó, mà chúng ta chỉ đến một module có chứa đối tượng urlpatterns khác, trong trường  hợp này là polls.urls, nên chúng ta phải dùng đến hàm include(), đối với các url chỉ đến một module url khác thì chuỗi regex không kết thúc bằng dấu $, hay nói cách khác là không có kết thúc.

Khi chúng ta gõ localhost:8000 thì django sẽ đọc các url trong file mysite/urls.py, trong file này chúng ta có một đường dẫn đến admin/, đường dẫn này trỏ đến hàm get_url() trong module admin.site của django, do đó bạn có thể gõ localhost:8000/admin và django sẽ trả về một trang đăng nhập mẫu (chúng ta sẽ tìm hiểu về trang admin này sau), url thứ hai là đường dẫn polls/ trỏ đến một file urls.py khác ở module polls.urls do chúng ta tự viết, file này lại chứa một list urlpatterns khác chứa các đường dẫn đến các hàm trả về HTML riêng của chúng, thế nên chúng ta có thể gõ localhost:8000/polls, và django sẽ trả về trang HTML tạo ra từ hàm index() trong module polls.urls.

Capture

Bạn có thể điều chỉnh chuỗi Regex để hiểu thêm.







Bình luận (7)

  1. misa

    Sory Admin,

    mình có làm theo hướng dẫn (đã bổ sung thêm 1 dòng ‘polls’ trong setting.py – mysitse/mysite) nhưng khi chay runserver (project polls) báo lỗi:

    Using the URL conf defined in mysite.urls Django tried these URL patterns, in this order :

    1. ^polls/
    2. ^admin/
    the current URL, didn’t match any of these

    Admin xem lại giúp nha.

    1. Phở Code Admin

      Bạn trỏ vào trình duyệt chính xác là localhost:8000/polls nhé, hoặc trong file urls.py phải gõ chính xác là ^polls/. Tóm lại là url và đường dẫn trên trình duyệt phải giống nhau.

      1. misa

        thanks! Adimin nha. mình làm đc rồi.
        sory admin, bạn có thể gửi cho mình 1 vài trang web để học python dạng giống phocode ko? mình ko có background IT nên tiếp cận hơi chậm.

        Thanks! bạn nhiều lắm…

Trả lời


Lưu ý: bọc code trong cặp thẻ [code language="x"][/code] để highlight code.


Ví dụ:


[code language="cpp"]


    std::cout << "Hello world";


[/code]



Các ngôn ngữ được hỗ trợ gồm: actionscript3, bash, clojure, coldfusion, cpp, csharp, css, delphi, diff, erlang, fsharp, go, groovy, html, java, javafx, javascript, latex, matlab, objc, perl, php, powershell, python, r, ruby, scala, sql, text, vb, xml.

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *