操作流程是根据例程梳理出来的,跟着流程走可以直接创建一个自己的Django项目。
但是流程里面给出的代码段并不是全部,想要更深入的学习最好还要结合例程。
点我下载,提取码:qjd2
例程操作的表单
1.Grade
2.Student
一、MySQL配置:
1.打开服务 - 执行<net start 服务名>
2.进入MySQL - 执行<mysql -u root -p>
3.输入密码
4.创建数据库 - 执行<create database 数据库名>
二、Django基本配置:
1.创建工程 - 执行<django-admin startproject 工程名>
2.创建项目 - 执行<python manage.py startapp 项目名>
3.激活项目 - 修改settings.py中的INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
项目名,
]
4.配置数据库 - 工程目录下的文件
A.修改__init__.py
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 数据库名,
"USER": "root",
"PASSWORD": 密码,
"HOST": "localhost",
"PORT": "3306",
}
}
5.创建模型类 - 项目目录models.py文件中
#类名结尾不用加单词复数s
class Grade(models.Model):
gname = models.CharField(max_length = 20)#字符串类型,字符串长度20
gdate = models.DateTimeField()#时间类型
ggirlnum = models.IntegerField()#整数类型
gboynum = models.IntegerField()
isDelete = models.BooleanField(default = False)#布尔类型,默认值False
#被实例后显示的信息
def __str__(self):
return self.gname
class Student(models.Model):
sname = models.CharField(max_length = 20)
sgender = models.BooleanField(default = True)
sage = models.IntegerField()
scontend = models.CharField(max_length = 20)
isDelete = models.BooleanField(default = False)
#关联外键
sgrade = models.ForeignKey("Grade",on_delete = models.CASCADE)
def __str__(self):
return self.sname
6.生成迁移文件 - 执行<python manage.py makemigrations>或<python manage.py makemigrations --empty 项目名>
7.执行迁移 - 执行<python manage.py migrate>
8.启动服务器 - 执行<python manage.py runserver ip:port>ip可以不写默认代表本机ip:port端口号默认是8000
三、测试数据库(可选):
1.进入到python shell - 执行<python manage.py shell>
2.引入包
from 项目名.models import Grade,Student
from django.utils import timezone
from datetime import *
3.查询所有数据 - 执行<Grade.objects.all()>
4.创建模型对象实例
#创建一个班级模型对象
grade1 = Grade()
grade1.gname = "python01"
grade1.gdate = datetime(year = 2019,month = 1,day = 14)#时间类型
grade1.ggirlnum = 1
grade1.gboynum = 20
grade1.isDelete = False
grade1.save()#添加数据
#创建一个学生模型对象
student1 = Student()
student1.sname = "李大帅01"
student1.sgender = False
student1.sage = 10
student1.scontend = "我是李大帅01"
student1.sgrade = grade1#关联对象
student1.save()
5.添加数据 - 执行<grade1.save()>
6.按条件查询 - 执行<grade1.objects.get(id = 1)>
7.修改数据 - 执行<grade1.gname = “python02”>之后再重新添加数据
8.删除数据 - 执行<grade1.delete()>
9.关联对象 - 执行<student1.sgrade = grade1>
10.获得关联对象的集合 - 执行<grade1.Student_set.all()>
11.创建模型对象并同时关联 - 不用.save()添加数据
student2 = grade1.Student_set.create(sname = u"李大帅02",sgender = True,scontend = u"我是李大帅02",sage = 10)
四.Admin站点管理
1.配置Admin应用(默认已配置) - 工程目录settings.py
INSTALLED_APPS = [
'django.contrib.admin',
]
2.创建管理员用户 - 执行<python manage.py createsuperuser>依次输入用户名、邮箱、密码
3.进入Admin站点 - 启动服务器后登陆网址
4.修改语言 - 工程目录settings.py
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
5.创建页面管理类 - 项目目录admin.py
#导入模型类
from .models import Grade,Student
class GradeAdmin(admin.ModelAdmin):
#列表页属性
list_display = ["id",,"sname","sgender","sage","scontend","isDelete","sgrade"]#显示字段
list_filter = ["sname"]#过滤字段
search_fields = ["sname"]#搜索字段
list_per_page = 5#分页
#添加、修改页属性,下面两条语句不能共存
fields = ["sname","sgrade","sage","scontend","isDelete"]#添加页属性排序
fieldsets = [
("班级信息",{"fields":["gname","gdate"]}),
("班级人数",{"fields":["ggirlnum","gboynum"]}),
("存储状态",{"fields":["isDelete"]}),
]#添加页,属性分组
6.关联对象同时创建
class StudentInfo(admin.TabularInline):#admin.StackedInline另一种显示样式
#同时创建的类
model = Student
#同时创建的条目个数
extra = 2
class GradeAdmin(admin.ModelAdmin):
#在原有的类中增加下面这条属性
#同时创建的模型对象
inlines = [StudentInfo]
7.布尔值显示
class StudentAdmin(admin.ModelAdmin):
#判断要显示的值
def gender(self):
if self.sgender == True:
return "男"
else:
return "女"
#设置字段显示的名称
gender.short_description = "性别"
#列表页属性
list_display = ["pk","sname",gender,"sage","scontend","isDelete","sgrade"]
8.执行动作位置
class StudentAdmin(admin.ModelAdmin):
#关闭顶部显示
actions_on_top = False
#打开底部系显示
actions_on_bottom = True
9.注册
A.代码注册
#第二个为可选参数,使用页面管理功能才需要
admin.site.register(Student,StudentAdmin)
B.装饰器注册
@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
五.视图
1.定义视图 - 项目目录views.py
from django.http import HttpResponse
from .models import Grade,Student#导入模型类
#request请求体,每个视图函数必须要有一个形参来接受请求体
#具体使用方法可见:https://docs.djangoproject.com/en/2.1/topics/http/urls/
def index(request):
#返回的内容
return HttpResponse("我是李大帅")
def detail(request,num):
return HttpResponse("%d"%num)
def getGrades(request):
#取模板数据
gradesList = Grade.objects.all()
#将数据传递给模板,"项目名/grades.html"是模块的路径,grades是传到模块的变量名
return render(request,"app/grades.html",{"grades":gradesList})
def getstudents(request):
studentsList = Student.objects.all()
return render(request,"app/students.html",{"students":studentsList})
def gradeStudents(request,id):
#id是urls.py传过来的请求体
studentsList = Grade.objects.get(id = id).student_set.all()
return render(request,"app/students.html",{"students":studentsList})
2.配置url
A.修改工程目录urls.py文件
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
#转到项目目录下的urls.py文件
path('', include("app.urls")),
]
B.项目目录下创建urls.py文件
from django.urls import path
from . import views#导入视图
urlpatterns = [
#如果地址与url字符串匹配,就会转到相应的函数
path('', views.index),
path('<int:num>/', views.detail),#num与函数的形参相对应
path('grades/', views.getGrades),
path('students/',views.getstudents),
path('grades/<int:id>',views.gradeStudents),
六.模板基本使用
1.创建模板 - 在与工程目录同级下创建文件夹./templates/项目名
2.配置模板路径 - 工程目录settings.py
TEMPLATES = [
'DIRS': [os.path.join(BASE_DIR,"templates")],
]
3.定义模板文件 - templates/项目名/模板名.html
4.模板例程
<body>
<h1>班级列表</h1>
<ul>
{%for grade in grades%}
<li>
<a href={{grade.id}}>{{grade.gname}}</a>
</li>
{%endfor%}
</ul>
</body>
注意:流程之间并没有严格的顺序之分,之所以要排列一二三四主要是为了简单。
流程梳理是借鉴凯哥的视频
sunck is good man