在开始之前,确保你的开发环境满足以下要求:
pip
包管理工具。在项目目录中创建并激活虚拟环境,保证项目依赖隔离:
# 创建虚拟环境
python -m venv env
# 激活虚拟环境
# Windows
env\Scripts\activate
# Linux/Mac
source env/bin/activate
在激活的虚拟环境中安装 Django:
pip install django
如果使用 MySQL 或 PostgreSQL,还需要安装相应的驱动:
mysqlclient
:pip install mysqlclient
psycopg2
:pip install psycopg2-binary
如果只是使用 SQLite,Django 默认支持,无需额外安装。
使用 django-admin
创建一个新的项目:
django-admin startproject myproject
创建后,项目的基本结构如下:
myproject/
manage.py # 项目管理脚本
myproject/
__init__.py # 包标识
settings.py # 项目设置
urls.py # URL 配置
asgi.py # ASGI 配置
wsgi.py # WSGI 配置
打开 myproject/myproject/settings.py
,找到 DATABASES
配置项,根据数据库类型修改配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
如果你使用 MySQL,修改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost', # 数据库主机地址,通常是 localhost
'PORT': '3306', # MySQL 默认端口
}
}
如果你使用 PostgreSQL,修改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost', # 数据库主机地址,通常是 localhost
'PORT': '5432', # PostgreSQL 默认端口
}
}
在项目目录中创建一个新的 Django 应用:
python manage.py startapp myapp
创建后,应用的结构如下:
myapp/
migrations/ # 数据库迁移文件目录
__init__.py
__init__.py # 包标识
admin.py # 管理后台配置
apps.py # 应用配置
models.py # 数据模型定义
tests.py # 单元测试
views.py # 视图函数
打开 myproject/myproject/settings.py
,在 INSTALLED_APPS
中添加你的新应用:
INSTALLED_APPS = [
# Django 自带的应用
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 你的应用
'myapp',
]
在 myapp/models.py
中定义数据模型。例如:
from django.db import models
class Lesson(models.Model):
id = models.CharField(max_length=20, primary_key=True)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
运行以下命令生成迁移文件:
python manage.py makemigrations
Django 会检测到模型更改并生成迁移文件,例如:
Migrations for 'myapp':
myapp/migrations/0001_initial.py
- Create model Lesson
运行以下命令将迁移文件应用到数据库,生成表结构:
python manage.py migrate
from django.db import models
class User(models.Model):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=100)
email = models.EmailField()
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL,
email VARCHAR(254) NOT NULL
);
age = models.IntegerField(default=18)
ALTER TABLE user ADD COLUMN age INT NOT NULL DEFAULT 18;
使用以下命令启动 Django 开发服务器:
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000/ 以查看项目是否正常运行。
如果需要通过 Django 的管理后台管理数据库,可以为模型添加管理支持。
打开 myapp/admin.py
,注册模型:
from django.contrib import admin
from .models import Lesson
admin.site.register(Lesson)
运行以下命令创建管理员账户:
python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。
启动开发服务器后,访问 http://127.0.0.1:8000/admin,使用管理员账户登录即可管理数据库中的数据。
可以通过 manage.py shell
交互式操作数据库:
python manage.py shell
在交互环境中:
from myapp.models import Lesson
# 创建记录
lesson = Lesson.objects.create(id='1', name='Django Basics')
# 查询记录
lesson = Lesson.objects.get(id='1')
print(lesson.name)
# 更新记录
lesson.name = 'Advanced Django'
lesson.save()
# 删除记录
lesson.delete()
通过以上步骤,你可以从零创建一个 Django 项目,并设置数据库支持。核心流程包括:
env\Scripts\activate
source env/bin/activate
deactivate
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
myapp/
migrations/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
python manage.py runserver
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py startapp blog
# settings.py
INSTALLED_APPS = [
# 默认应用
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 你的自定义应用
'myapp',
'blog',
]
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'), # 主页
]
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # 包含 blog 的路由
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 使用 MySQL 驱动
'NAME': 'my_db_01', # 数据库名
'USER': 'your_mysql_username', # MySQL 用户名
'PASSWORD': 'your_mysql_password', # MySQL 密码
'HOST': 'localhost', # 数据库主机,通常是 localhost
'PORT': '3306', # MySQL 默认端口
}
}
from django.db import models
class User(models.Model):
id = models.AutoField(primary_key=True) # 自增主键
username = models.CharField(max_length=45) # 用户名
password = models.CharField(max_length=45) # 密码
status = models.BooleanField(default=True) # 状态 (映射为 TINYINT(1))
class Meta:
db_table = 'users' # 映射到 MySQL 中的 users 表
managed = False # 告诉 Django 不去管理(创建/迁移)此表
from django.http import JsonResponse
from .models import User
def get_all_users(request):
try:
# 查询所有用户
users = User.objects.all().values('id', 'username', 'password', 'status')
users_list = list(users) # 转换为列表以便返回 JSON 响应
return JsonResponse({'status': 'success', 'data': users_list}, safe=False)
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}, status=500)
from django.urls import path
from .views import get_all_users
urlpatterns = [
path('users/', get_all_users, name='get_all_users'), # 绑定接口到视图函数
]
from django.urls import path
from .views import get_all_users
urlpatterns = [
path('users/', get_all_users, name='get_all_users'), # 绑定接口到视图函数
]
users = User.objects.all().values('id', 'username', 'password', 'status')
# 相当于sql
SELECT id, username, password, status FROM users;
from django.db import connection
from .models import User
def get_all_users_raw(request):
with connection.cursor() as cursor:
cursor.execute("SELECT id, username, password, status FROM users")
rows = cursor.fetchall()
users_list = [
{'id': row[0], 'username': row[1], 'password': row[2], 'status': row[3]}
for row in rows
]
return JsonResponse({'status': 'success', 'data': users_list})
users = User.objects.raw("SELECT id, username, password, status FROM users")
for user in users:
print(user.username)