Django1.11.4 版本支持Python3.5 3.6
1.Django安装
pip install django==1.11.4
2.验证是否安装成本
python
import django
django.get_version()
3.创建项目
a. 在合适位置创建一个目录django_pratice
b. 打开cmd,进入创建的django_pratice目录下
c. django-admin startproject django_demo(项目名)
d. cmd下输入tree . /f查看目录层级
manage.py 一个命令行工具,可以让我们用多种方式对Django项目进行交互
__init__.py 一个空文件,它告诉Python这个目录应该被看做一个包
settings.py 项目的配置文件(主要处理文件)
urls.py 项目的url声明 (主要处理文件)
wsgi.py 项目与WSGI兼容的Web服务器入口
4. 基本操作
a.设计表结构
班级表结构: 表名1----grades 字段---班级名称(gname)、成立时间(gdate)、女生总数(ggirlnum)、男生总数(gboynum)、是否删除(isDelete)
学生表结构: 表名2----students 字段---学生姓名(sname)、学生性别(sgender)、学生年龄(sage)、学生简介(scontend)、学生班级(sgrade)、是否删除(isDelete)
b.配置数据库(Django默认使用SQLite数据库)
在settings.py文件中通过DATABASES选项进行数据库配置(先决条件:配置MySQL且Python3.x中安装的是PyMySQL)
在__init__.py文件中写入两行代码
import pymysql
pymysql.install_as_MySQLdb()
创建数据库django_demo
create database django_demo(数据库名)
以数据库django_demo为例进行示范:对settings.py中的DATABASES进行设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "django_demo",
'USER': "root",
'PASSWORD': "123456",
'HOST': "localhost",
'PORT': "3306"
}
}
c. 创建应用------在一个项目中可以创建多个应用,每个应用进行一种业务处理
打开cmd,进入django_demo目录下的django_demo(项目目录)的目录,输入命令创建名为myApp的app:
python manage.py startapp myAPP(应用名)
myAPP目录说明:
admin.py 进行站点配置
models.py 创建模型
views.py 创建视图
d. 激活应用
在settings.py文件中,将myApp应用加入到INSTALLED_APPS选项中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myAPP',
]
e. 定义模型(有一个数据表就对应有一个模型,在models.py文件中定义模型)
引入:from django.db import models,模型类要继承models.Model类
示例:
class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)
def __str__(self):
return "%s--%d--%d" % (self.gname, self.ggirlnum, self.gboynum)
class Students(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("Grades", on_delete=models.CASCADE,) # 不需要定义主键,在生成时自动添加,并且值为自动增加
f. 在数据库中生成数据表
打开cmd,进入django_demo目录下的django_demo(项目目录)的目录
生成迁移文件: 执行 python manage.py makemigrations 在migrations目录下生成一个迁移文件,此时数据库中还没有生成数据表
执行迁移: 执行 python manage.py migrate 相当于执行MySQL语句创建了数据表 select * from myapp_students; desc myapp_students;
g. 测试数据操作
打开cmd,进入django_demo目录下的django_demo(项目目录)的目录,输入 python manage.py shell
引入包
from myAPP.models import Grades, Students
from django.utils import timezone
from datetime import *
查询所有数据 类名.objects.all() 示例: Grades.objects.all()
添加数据(本质:创建一个模型类的对象实例即创建一个数据表,类中的属性对于表中的字段)
grade1 = Grades()
grade1.gname = "python01"
grade1.gdate = datetime(year=2017, month=7, day=17)
grade1.ggirlnum = 3
grade1.gboynum = 70
grade1.save()
查看某个对象 类名.objects.get(pk=索引号) 示例:Grades.objects.get(pk=2)
修改某个数据 模型对象属性 = 新值 示例:grade2.gboynum = 60 grade2.save()
删除数据 模型对象.delete() 示例:grade2.delete()
(注意:这是物理删除,数据库中的相应数据被永久删除)
关联对象
示例:
stu = Students()
stu.sname = "curry"
stu.sgender = False
stu.sage = 20
stu.scontend = "I am curry"
stu.sgrade = grade1
stu.save()
获得关联对象的集合
需求:猎取python04班级的所有学生
对象名.关联的类名小写_set.all() 示例:grade1.students_set.all()
需求:创建曾志伟,属于python04班级
示例:
stu3 = grade1.students_set.create(sname=u'曾志伟',sgender=True,scontend=u"我叫曾志伟",sage=45)( 注意:汉字要转码,这样创建的数据直接被添加到了数据库当中。)
h. 启动服务器
打开cmd,进入django_demo目录下的django_demo(项目目录)的目录
格式:python manage.py runserver ip:port(注意:ip可以不写,不写代表本机ip,端口号默认是8000) 示例:python manage.py runserver
说明:这是一个纯python编写的轻量级web服务器,仅仅在开发测试中使用这个
i. Admin站点管理
概述:内容发布----负责添加,修改,删除内容;公告访问-----xxx
配置Admin应用: 在settings.py文件中的INSTALLED_APPS中添加'django.contrib.admin',这条默认是添加好的。
创建管理员用户:
新开cmd,在项目目录下执行 python manage.py createsuperuser依次输入账号名,邮箱,密码即可完成用户创建
登陆:
http://127.0.0.1:8000/admin/
汉化:
把django_demo目录下的settings.py中作如下设定:LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'
再重启web服务---python manage.py runserver
管理数据表:
修改 myAPP\admin.py 如下:
from django.contrib import admin
# Register your models here.
from .models import Grades, Students
# 注册
admin.site.register(Grades)
admin.site.register(Students)
自定义管理页面:-------------在admin.py文件下写一个类
属性说明:
# 列表页属性
list_display = [] # 显示字段设置
list_filter = [] # 过滤字段设置
search_fields = [] # 搜索字段设置
list_per_page = [] # 分页设置
# 添加,修改页属性
fields = [] # 规定属性的先后顺序
fieldsets = [] # 给属性分组 (注意:fields与fieldsets不能同时使用)
属性示例:
# 列表页属性
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"]}),
]
关联对象:需求:在创建一个班级时可以直接添加几个学生
class StudentsInfo(admin.TabularInline):# 可选参数admin.StackedInline
model = Students
extra = 2
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
布尔值显示问题示例:
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender:
return "男"
else:
return "女"
# 设置页面列的名称
gender.short_description = "性别"
list_display = ['pk', 'sname', 'sage', gender,
'scontend', 'sgrade', 'isDelete']
list_per_page = 10
admin.site.register(Students, StudentsAdmin)
执行按钮位置:
class StudentsAdmin(admin.ModelAdmin):
...snip...
actions_on_top = False
actions_on_bottom = True
admin.site.register(Students, StudentsAdmin)
使用装饰器完成注册:
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
...snip...
actions_on_top = False
actions_on_bottom = True
j. 视图的基本使用
概述:在Django中,视图是对web请求进行回应,视图就是一个python函数,在views.py文件中定义。
定义视图:示例:在myApp\views.py中写入
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Curry is a good man")
配置url:
方法:url方法
修改django_demo目录下的urls.py文件:
from django.contrib import admin
from django.conf.urls import url,include
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),
]
k. 模板的基本使用
概述:模板是HTML页面,可以根据视图中传递过来的数据进行填充
创建模板:
创建templates目录,在目录下创建对应项目的模板目录(django_demo/templates/myAPP)
配置模板路径:
修改settings.py文件下的TEMPLATES下的'DIRS'为'DIRS': [os.path.join(BASE_DIR, 'templates')],
定义grades.html与students.html模板:
在templates\myAPP\目录下创建grades.html与students.html模板文件
模板语法:
{{输出值,可以是变量,也可以是对象,属性}}
{%执行代码段%}
http://127.0.0.1:8000/grades
写grades.html模板:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>班级信息</title>
</head>
<body>
<h1>班级信息列表</h1>
<ul>
<!--[python04, python05, python06]-->
{%for grade in grades%}
<li>
<a href="#">{{grade.gname}}</a>
</li>
{%endfor%}
</ul>
</body>
</html>