一、Django安装
pip install Django==1.11.4
二、验证安装
import django
django.get_version()
三、介绍
1、简介
是用python语言写的开源web开发框架,并遵循MVC设计。
Django的主要目的是简便、快速的开发数据库驱动的网站。
2、特点
-
重量级框架
-
MVT模式
-
MVC
其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。
M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
V全拼为View,用于封装结果,生成页面展示的html内容。
C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
MVT
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
四、创建第一个项目
1、输入:django-admin startproject project
查看目录结构:tree ./F
2、目录层级说明
manage.py
一个命令行工具、可以让你各种方式与该Django项目进行交互
init.py
一个空文件、告诉python该项目是一个python包
urls.py
项目的url申明,一份由Django驱动的网站“目录”
wsgi.py
一个wsgi兼容的web服务器入口,以便运行你的项目
基本操作
1、设计表结构
a、班级表结构
表名:grade
字段
班级名称:gname
成立时间:gdate
女生总数:ggirlnum
男生总数:gboynum
是否删除:isDelete
b、学生表结构
表名:students
字段:
学生姓名:sname
学生性别:sgender
学生年龄:sage
学生简介:scontend
所属班级:sgrade
2、配置数据库
注意 django默认的数据库是sqlit数据库
DATABASES ={
‘default’:{
‘ENGINE’:‘django.db.backends.sqlite3’,
‘NAME’:oos.path.join(BASE_DIR,‘DB.Sqlite3’),
}}
在setting.py 中,通过DATABASE选项进行数据库配置
a、配置MySQL
python3.x安装的是PyMySQL
在__init__.py文件中写入两行代码
1 import pymysql
2 pymysql.install_as_MySQLdb()
b、格式
DATABASES = {
‘default’:{
‘ENGINE’:‘django.db.backends.mysql’,
‘NAME’:‘wj’,
‘USER’:‘密码’,
‘HOST’:‘localhost’,
‘PSRT’:‘3306’,
}}
3、创建应用
在一个项目中可以创建多个应用,每个应用进行一种业务处理
a、进入到project的目录
b、执行:python manage.py startapp myAPP
c、myAPP目录说明
admin.py
文件跟网站的后台管理站点配置相关
models.py
文件用户保存数据库模型类。
views.py
文件用于编写Web应用视图。
tests.py
文件用于开发测试用例,编写单元测试
4、激活应用
在 setting.py文件中,将myAPP添加到INSTALLED-APPS选项中
5、定义模型
概述:有一个数据表就应该有对应的一个模型
在models.py中定义模型
引入:from django.db import models
模型类要继承 models.Model类
from django.db import models
class Grades(models.Model)
gname=models.CharField(mex_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete=models.BooleanField(default=False)
clsss Student(models.Model)
sname=models.CharField(max_length=20)
sgender=models.BooleanField(default=True)
sage=models.IntegerFiled()
scontend=models.CharField(max_length=20)
isDelete=models.BooleanField(default=False)
sgrade =models.ForeignKey('Grades') #关联外键
6、在数据库中生成数据表
a、生成迁移文件
执行:python manage.py makemigratuins
在migrations目录下生成一个迁移文件、此时还没有生成数据表
b、执行迁移
执行:python manage.py migrate
相当于执行sql语句创建数据表
7、测试数据操作
a 、进入到python shell
b、执行:python manage.py shell
c、引入包:
from myAPP.models import Grades,Student
from django.utils import timezone
from datetime import *
d、查询所有数据
格式:类名.objects.all()
Grades.objects.all()
e、添加数据
本质:创建一个模型类的对象实例
grade1=Grades()
grade1.gname=‘python04’
grade1.gdate=datetime(year=2020,month=4,day=4)
grade1.ggirlnum=3
grade1.gboynum=70
grade1.save()
f 、查询某个对象
格式:类名.objects.get(pk=1)
Grades.objects.get(pk=1)
g、修改数据
模型对象.属性=新值
grade1.gboynum=60
grade1.save()
h、删除数据
物理删除(真实删除)
模型对象.delete()
逻辑删除 (isDelete =True)
I、关联对象
创建一个学生
stu=Students()
stu.snname=‘小明’
stu.sgender=False
stu.scontend=‘我叫小明’
stu.sgrade=grade1
stu.save()
需求:获取python04班级的所有学生
格式:对象名.关联的对象名_set.all()
geade1.students_set.all()
创建一个学生属于 “python04”班
stu1 = grade1.students_set.create(sname=u'曾志伟’,sgender=True,scontend=u'我叫曾志伟‘,sage=45)
不用save() 直接创建成功
7、启动服务
a、格式 python manage.py runserver
b、说明
这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用
8、Admin站点管理
a、概述:
内容发布
负责添加、删除、修改内容
公共访问
b、配置Admin应用
在settings.py文件中的INSTALLED_APPS中添加“django.contrib.admin",默认已经添加好的
c、创建管理员用户
执行:python manage.py createsuperuse
依次输入用户名、邮箱、密码
创建后在网址输入账号密码:http://127.0.0.1:8000/admin/
d、汉化
修改settings.py 文件
LANGUAGE_CODE =‘zh-Hans’
TIME_ZONG=‘Asia/Shanghai’
USE_I18N=True
USE_L10N=True
USE_TZ=True
9、管理数据表
a、修改admin.py文件
from .models import Grades,Students
#注册
admin.site.register(Grades)
admin.site.register(Students)
b、自定义管理页面
from .models import Grades,Students
注册
class GradesAdmin(admin.ModelAdmin):
# 列表页属性
list_display = [‘pk’,‘gname’,‘gdate’,‘ggirlnum’,‘gboynum’,‘isDelete’]
list_filter = [‘gname’]
search_fields = [‘gname’]
list_per_page = 5
# 添加、修改页属性
# fields = ['ggirlnum','gboynum','gname','gdate','isDelete']
# fieldsets = [
# ("num",{"fields":['ggirlnum','gboynum']})
# ("base",{"fields":['gname','gdate','isDelete']})
# ]
admin.site.register(Grades, GradesAdmin)
属性说明:
列表页属性
list_display
显示字段
list_filter
过滤字段
search_fields
搜索字段
list_per_page
分页
添加修改属性
fields
属性先后顺序
fieldsets
给属性分组
注意:fields与fieldsets不能同时使用
关联对象
需求:在创建一个班级时可以添加几个学生
class StudentsInfo(admin.TabularInline):# Stackedlnline
model = Students
extra = 2
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
10、视图的基本使用
a、概述:
在django中,视图对web请求进行回应
视图就是一个python函数,在views.py文件中定义
b、定义视图
from django.http import HttpResponse
def index(request):
return HttpResponse("WJ is a good man")
c、配置url
修改project目录下的url.py文件
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r’^admin/‘, admin.site.urls),
url(r’^',include(‘myAPP.urls’))
]
在myAPP应用目录下创建一个urls.py文件
from django.conf.urls import url
from . import views
urlpatterns = [
url(r’^$',views.index)
]