「写在前面」
本文为千锋教育 Django 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。
目录
- 0 课程介绍
- 1 Django 快速入门
- 1.1 Django 介绍
- 1.2 Django 安装
- 1.3 创建 Django 项目
- 1.4 运行 Django 项目
- 1.5 数据迁移
- 1.6 创建应用App
- 1.7 视图Views
- 1.8 路由Route
- 1.9 模型Model
- 1.10 后台管理Admin
0 课程介绍
1 Django 快速入门
1.1 Django 介绍
P2:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=2
Django 官网:https://docs.djangoproject.com/en/4.2/
本教程使用的是 Django 4.2 版本
Django 是一个开放源代码的 Web 应用框架 ,由 Python 写成。采用了 MTV 的框架模式,即模型 M ,视图 V ,模版 T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS (内容管理系统)软件。并于 2005 年 7 月在 BSD 许可证下发布。这套框架是以比利时的吉普赛爵士吉他手 Django Reinhardt 来命名的。
1.2 Django 安装
1.3 创建 Django 项目
创建一个 Django 项目:
django-admin startproject HelloDjango
创建项目后,默认的目录结构:
- manage.py :
- 是 Django 用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。
- HelloDjango/init.py :
- 告诉 python 该目录是一个 python 包,暂无内容,后期一些工具的初始化可能会用到
- HelloDjango/settings.py :
- Django 项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等。
- HelloDjango/urls.py :
- 维护项目的 URL 路由映射,即定义当客户端访问时由哪个模块进行响应。
- HelloDjango/wsgi.py :
- 全称为 Python Web Server Gateway Interface,即 Python 服务器网关接口,是 Python 应用与 web 服务器之间的接口,用于 Django 项目在服务器上的部署和上线,一般不需要修改。
- HelloDjango/asgi.py :
- 定义 ASGI 的接口信息,和 WSGI 类似,在 3.0 以后新增 ASGI,相比 WSGI,ASGI 实现了异步处理,用于启动异步通信服务,比如:实现在线聊天等异步通信功能。(类似 Tornado 异步框架)
settings.py 文件详解:
from pathlib import Path
# 项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent
# 项目的密钥
SECRET_KEY = 'django-insecure-@o$)(@-s)t(jenz*5wbs^7-tohe)(d=equv7k3t4at6&2p9v_3'
# 是否调试模式
# True: 表示调试模式,自动重启,一般用于开发过程中
# False: 表示非调试模式,一般用于上线部署
DEBUG = True
# 被允许的域名或IP
# * : 表示通配符,匹配所有的IP,表示可以被其他任何电脑来访问我(局域网)
# 上线后可以指定其他哪些服务器来访问我
ALLOWED_HOSTS = ['*']
# 定义应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 定义自己的应用
'user',
'App',
]
# 中间件
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 = 'DjangoPro2.urls'
# 模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]
# wsgi目录
WSGI_APPLICATION = 'DjangoPro2.wsgi.application'
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# 密码验证
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 = 'zh-hans' # en-us英语,zh-hans中文
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# 静态文件 (CSS, JavaScript, Images)
STATIC_URL = 'static/'
# 默认的主键字段类型
# Default primary key field type
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
1.4 运行 Django 项目
运行 Django 项目:
python manage.py runserver [ip:port]
可以直接进行服务运行,默认执行起来的端口是 8000
也可以自己指定 ip 和端口:
-
监听机器所有可用 ip (电脑可能有多个内网 ip 或多个外网 ip) ︰
python manage.py runserver 0.0.0.0:8000
-
同时在 settings.py 中将
ALLOWED_HOSTS=['*']
-
在其他局域网电脑上可以通过在浏览器输入 Django 项目所在电脑的 IP:8000 来访问
1.5 数据迁移
迁移的概念: 就是将模型映射到数据库的过程
生成迁移文件:
python manage.py makemigrations
执行迁移:
python manage.py migrate
不需要初始化迁移文件夹,每个应用默认有迁移文件夹 migrations
1.6 创建应用App
创建一个 App:
python manage.py startapp App
创建后需要在 settings.py 中将应用加入到 INSTALLED_APPS 选项中:
INSTALLED_APPS = [
# 定义自己的应用
'App',
]
应用目录介绍:
- init.py :
- 其中暂无内容,使得 app 成为一个包
- admin.py :
- 管理站点模型的声明文件,默认为空
- apps.py :
- 应用信息定义文件,在其中生成了 AppConfig,该类用于定义应用名等数据
- models.py :
- 添加模型层数据类文件
- views.py :
- 定义 URL 相应函数
- migrations :
- 自动生成,生成迁移文件的
- tests.py :
- 测试代码文件
1.7 视图Views
user/views.py 文件内容:
from django.shortcuts import render
from django.http import HttpResponse
# 视图函数Views
def index(request):
pass
# 返回相应 response
return HttpResponse('Hello Django!')
# 渲染模板render,渲染html
return render(request, 'index.html')
user/templates/index.html 文件内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>首页</h2>
<hr>
<h4>Hello Django!</h4>
</body>
</html>
DjangoPro2/urls.py 文件内容:
from django.contrib import admin
from django.urls import path
from user.views import *
urlpatterns = [
# 路由url
# 直接访问视图函数,没有使用子路由
path('index/', index),
path('admin/', admin.site.urls),
]
访问 127.0.0.1:8000/index/ 返回 index.html 内容
HTTP 协议前后端交互:
P11:https://www.bilibili.com/video/BV1fh4y1Z7jp?p=11
Django 框架流程:
1.8 路由Route
使用子路由:
DjangoPro2/urls.py 文件内容:
from django.contrib import admin
from django.urls import path, include
from user.views import *
urlpatterns = [
# 使用子路由
# 一个应用对应一个子路由
path('user/', include('user.urls')),
path('admin/', admin.site.urls),
]
user/urls.py 文件内容:
from django.urls import path
from user.views import *
# 子路由
urlpatterns = [
path('index/', index, name='index'),
path('index2/', index2, name='index2'),
]
user/views.py 文件内容:
from django.http import HttpResponse
def index(request):
return HttpResponse('Index')
def index2(request):
return HttpResponse('Index2')
访问 127.0.0.1:8000/user/index/ 返回 Index
访问 127.0.0.1:8000/user/index2/ 返回 Index2
1.9 模型Model
user/models.py 文件内容:
from django.db import models
# 模型Model <==> 表结构
# 类属性 <==> 表字段
# 对象 <==> 表的一行记录
class UserModel(models.Model):
name = models.CharField(max_length=30, unique=True) # 对应的SQL: name varchar(30)
age = models.IntegerField(default=18) # 对应的SQL: age int defalut 18
sex = models.CharField(max_length=20) # 对应的SQL: sex varchar(20)
is_deleted = models.BooleanField(default=False)
执行数据迁移:
python manage.py makemigrations
python manage.py migrate
会在数据库中生成一张名为 user_usermodel 的表,给表中添加数据:
user/views.py 文件内容:
from django.shortcuts import render
from user.models import *
def get_users(request):
# 模型操作;获取所有user
users = UserModel.objects.all()
return render(request, 'users.html', {'users': users})
user/templates/users.html 文件内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>所有用户</title>
</head>
<body>
<h2>所有用户</h2>
<hr>
<ul>
{% for user in users %}
<li>{{ user.name }},{{ user.age }}</li>
{% endfor %}
</ul>
</body>
</html>
user/urls.py 文件内容:
from django.urls import path
from user.views import *
# 子路由
urlpatterns = [
path('users/', get_users, name='users'),
]
访问 127.0.0.1:8000/user/users/ 返回:
1.10 后台管理Admin
后台管理系统的使用步骤:
-
在 user/admin.py 文件中注册对应的模型
from django.contrib import admin
from user.models import *admin.site.register(UserModel)
-
需要创建超级管理员的账号和密码
python manage.py createsuperuser
-
根路由 DjangoPro2/urls.py 中添加
from django.contrib import admin
from django.urls import pathurlpatterns = [
path('admin/', admin.site.urls),
] -
访问后台管理系统:http://127.0.0.1:8000/admin/
「结束」
注:本文为个人学习笔记,仅供大家参考学习,不得用于任何商业目的。如有侵权,请联系作者删除。
本文由mdnice多平台发布