打开指定文件夹,在路径位置输入cmd打开命令行
django-admin startproject 项目名 创建项目
python manage.py startapp 子应用名
1.3注册子应用在settings.py文件内注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'创建的子应用名' #注册子应用
]
1.4配置模板
在settings.py文件内配置模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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',
],
},
},
]
1.5配置数据库
在settings.py文件内
# 配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 使用mysql数据库
'HOST': 'localhost', # 主机
'PORT': 3306, # 端口
'USER': 'root', # 数据库的用户名
'PASSWORD': '密码', # 数据库的密码
'NAME': '创建的数据库名', # 数据库的名字
}
}
1.6修改语言和时区
在settings.py文件内
LANGUAGE_CODE = 'zh-Hans' #语言 TIME_ZONE = 'Asia/Shanghai' #时区1.7配置静态文件
在settings.py文件内
# 配置静态资源(现在基本上用不到) STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] #配置路径,在根目录创建文件夹1.8常用的mysql代码语句
查看所有数据库: show databases;
创建数据库: create database 数据名 charset=utf8;
删除数据库: drop database 数据库名;
调用数据库: use 数据库名;
查看数据库下的所有表: show tables;
查看表结构: desc 表名;
查看表中的所有数据: select * from 表名;
在跟项目名同名的文件夹内init.py文件里安装
import pymysql pymysql.install_as_MySQLdb()1.9.1创建模型类
在子应用文件夹里的models.py创建
# 模型类 会自动生成 id字段
#老师模型类
class Teacher(models.Model):
tea_name=models.CharField(max_length=20,verbose_name='老师姓名')
course=models.CharField(max_length=20,verbose_name='所授课程')
class Meta:
verbose_name='老师表'
verbose_name_plural=verbose_name
db_table='teacher'
def __str__(self):
return self.tea_name
#学生模型类
class Student(models.Model):
stu_name = models.CharField(max_length=20, verbose_name='老师姓名')
height = models.DecimalField(max_digits=5,decimal_places=2,verbose_name='身高')
face=models.IntegerField(default=60,verbose_name='颜值')
teacher=models.ForeignKey(Teacher,on_delete=models.CASCADE,verbose_name='老师')#外键
class Meta:
verbose_name = '学生表'
verbose_name_plural = verbose_name
db_table = 'student'
def __str__(self):
return self.stu_name
1.9.2创建好模型类后进行迁移
在项目内终端执行
生成迁移文件:python manage.py makemigrations
执行迁移:python manage.py migrate
如果迁移出错,把数据库删了创建新的数据库,生成的迁移文件也删了,重新执行上面2个步骤
创建超级用户 (python终端内运行)
python manage.py createsuperuser
电子邮件地址直接回车跳过
(前后密码要一致)
如果出现cryptography报错就python终端内安装
pip install cryptography
2.在子应用的admin.py文件中添加代码,注册表,不然admin控制台没办法管理这个表
from django.contrib import admin #导包 from myapp.models import Teacher,Student #models.py文件内创建的模型类名 # Register your models here. admin.site.register(Teacher) admin.site.register(Student)
3.运行项目,在admin页面添加数据
案例:实现一对一增删改查。创建两个表
外键绑定,实现增删改查
需要3个页面、需要4个类视图
老师类视图:
展示老师信息
点击老师名字跳转到学生页面
并且是绑定老师的学生
学生类视图:
删除,修改
点击删除删除学生信息
点击修改,跳转到修改页面进行修改
修改类视图:
输入学生的信息进行修改
这是将三个html文件写在一起了
注意看注释每个文件隔开了
Title
老师页面
| 编号 | 老师姓名 | 所授课程 |
| {{ i.id }} | {{ i.tea_name }} | {{ i.course }} |
学生页面
| 编号 | 学生姓名 | 身高 | 颜值 | 授课老师 | 操作 |
| {{ i.id }} | {{ i.stu_name }} | {{ i.height }} | {{ i.face }} | {{ i.teacher }} | 删除 修改 |
修改页面
在views.py文件内创建视图类from django.shortcuts import render,redirect
from django.views import View
from myapp.models import Teacher,Student
from django.http import HttpResponse
# Create your views here.
#获取老师数据 传值到老师页面
class Teacherview(View):
def get(self,request):
teachers=Teacher.objects.all()
return render(request,'teachers.html',{'teachers':teachers})
#对应的学生类视图
class Studentview(View):
def get(self,request,id):
#id:老师的编号
#根据老师的编号获取对应学生的信息
students=Student.objects.filter(teacher_id=id)
return render(request,'students.html',{'students':students})
#删除学生信息
class Delstudentview(View):
def get(self,request,id):
#删除数据并重定向到老师页面
# Student.objects.filter(id=id).delete()
# return redirect('/tea/')
#2.删除数据并重定向到学生页面
stu_data=Student.objects.get(id=id)
#获取老师id 用于重定向
tea_data=stu_data.teacher_id
stu_data.delete()
#传值对应老师的id
return redirect(f'https://blog.csdn.net/stu/{tea_data}/')
#根据id修改学生信息
class Updatestudentview(View):
#获取页面
def get(self,request,id):
try:
stu_data=Student.objects.get(id=id)
except Exception as e:
print(e)
return HttpResponse('要修改的数据不存在')
return render(request,'index.html',{'student':stu_data})
#根据id修改学生信息
def post(self,request,id):
name1=request.POST.get('name')
height1=request.POST.get('height')
face1=request.POST.get('face')
teacher1=request.POST.get('teacher')
try:
Student.objects.filter(id=id).update(
stu_name=name1,
height=height1,
face=face1,
teacher=teacher1,
)
except Exception as e:
print(e)
return HttpResponse('修改数据失败')
return redirect('/tea/')
配置路由
#导包
from myapp import views
urlpatterns = [
# path('admin/', admin.site.urls),
#老师页面
path('tea/',views.Teacherview.as_view()),
#学生页面
path('stu//',views.Studentview.as_view()),
#删除学生信息
path('del//',views.Delstudentview.as_view()),
#修改学生信息
path('update//',views.Updatestudentview.as_view())
]
2.路由分发
将主路由扽分发到子应用里
先在子应用里创建一个跟主路由同名的urls.py文件
然后将主路由里的文件复制到子应用里的urls.py中
# from django.contrib import admin
from django.urls import path,re_path
from myapp import views
urlpatterns = [
# path('admin/', admin.site.urls),
#老师页面
path('tea/',views.Teacherview.as_view()),
#学生页面
path('stu//',views.Studentview.as_view()),
#删除学生信息
path('del//',views.Delstudentview.as_view()),
#修改学生信息
path('update//',views.Updatestudentview.as_view())
]
在主路由里进行分发
from django.contrib import admin
#导包
from django.urls import path,include
from myapp import urls
#路由分发 全部分到子路由
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls))
]



