Thiết lập Môi trường Phát triển
Sử dụng Conda để tạo một môi trường ảo biệt lập giúp quản lý các gói thư viện Python hiệu quả hơn và tránh xung đột phiên bản.
conda create --name django_web_env python=3.10
conda activate django_web_env
pip install django mysqlclient
Sau khi cài đặt hoàn tất, tích hợp môi trường này vào PyCharm bằng cách điều hướng đến Settings > Project > Python Interpreter, chọn Add Interpreter và trỏ đường dẫn đến môi trường django_web_env vừa tạo.
Cấu trúc Thư mục Dự án
Một dự án Django tiêu chuẩn sau khi khởi tạo sẽ có cấu trúc phân cấp như sau:
| Đường dẫn | Mô tả chi tiết |
|---|---|
manage.py |
Công cụ dòng lệnh trung tâm để tương tác với dự án, thực thi các tác vụ như chạy server, đồng bộ cơ sở dữ liệu. |
core_project/ |
Thư mục chứa các cấu hình toàn cục của hệ thống. |
- __init__.py |
Định danh thư mục là một Python package. |
- settings.py |
Nơi khai báo các thiết lập cốt lõi: kết nối database, middleware, ứng dụng đã cài đặt. |
- urls.py |
Bộ định tuyến URL cấp dự án, điều hướng các yêu cầu HTTP đến đúng ứng dụng. |
- wsgi.py / asgi.py |
Điểm vào (entry point) dành cho các web server chuẩn WSGI hoặc ASGI khi triển khai thực tế. |
main_app/ |
Module ứng dụng chứa logic nghiệp vụ cụ thể. |
- models.py |
Định nghĩa cấu trúc bảng cơ sở dữ liệu thông qua ORM. |
- views.py |
Xử lý logic yêu cầu từ người dùng và trả về phản hồi HTTP. |
- admin.py |
Đăng ký các model để quản lý qua giao diện Django Admin có sẵn. |
- migrations/ |
Lưu trữ lịch sử thay đổi cấu trúc cơ sở dữ liệu. |
- templates/ |
Thư mục chứa các file HTML dùng để render giao diện. |
- static/ |
Nơi lưu trữ tài nguyên tĩnh như CSS, JavaScript và hình ảnh. |
Tùy chỉnh Tham số Cấu hình
Tiến hành điều chỉnh file settings.py để thiết lập kết nối cơ sở dữ liệu MySQL và cấu hình đường dẫn template:
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-random-string-for-development-only'
DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main_app', # Đăng ký ứng dụng mới
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'core_project.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'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',
],
},
},
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'app_database',
'USER': 'db_user',
'PASSWORD': 'db_password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
AUTH_PASSWORD_VALIDATORS = [
{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'},
{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
]
LANGUAGE_CODE = 'vi'
TIME_ZONE = 'Asia/Ho_Chi_Minh'
USE_I18N = True
USE_TZ = True
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / 'static_root'
STATICFILES_DIRS = [BASE_DIR / 'static']
Cập nhật file manage.py để trỏ đúng module settings:
#!/usr/bin/env python
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core_project.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Lỗi hệ thống: Không thể khởi tạo Django. "
"Vui lòng đảm bảo gói django đã được cài đặt trong môi trường ảo."
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
Thiết lập định tuyến URL cấp ứng dụng trong main_app/urls.py:
from django.urls import path
from . import views
app_name = 'main'
urlpatterns = [
path('dashboard/', views.home_view, name='home'),
path('auth/signin/', views.sign_in, name='signin'),
path('auth/signup/', views.sign_up, name='signup'),
]
Tích hợp URL của ứng dụng vào dự án chính qua core_project/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('management/', admin.site.urls),
path('', include('main_app.urls')),
]
Khởi chạy Máy chủ Phát triển
Thực thi lệnh sau trong terminal để bắt đầu máy chủ cục bộ:
python manage.py runserver 0.0.0.0:8000
Truy cập http://127.0.0.1:8000 trên trình duyệt để kiểm tra trạng thái hoạt động.
Xử lý Lỗi Tương thích Phiên bản MySQL
Trong quá trình kết nối, nếu hệ thống trả về lỗi django.db.utils.NotSupportedError: MySQL 8.0 or later is required, nguyên nhân là do phiên bản MySQL hiện tại quá cũ (ví dụ: 5.6 hoặc 5.7) trong khi Django yêu cầu tối thiểu phiên bản 8.0.
Phương án tối ưu nhất là nâng cấp hệ quản trị cơ sở dữ liệu lên MySQL 8.0+. Tuy nhiên, trong trường hợp bắt buộc phải sử dụng phiên bản cũ, có thể can thiệp trực tiếp vào source code của Django. Mở file base.py nằm trong đường dẫn django/db/backends/mysql/ của môi trường ảo, tìm đến phương thức kiểm tra phiên bản và vô hiệu hóa nó:
# Comment lại dòng kiểm tra phiên bản
# self.check_database_version_supported()
Lưu file và khởi động lại server để áp dụng thay đổi.