一、安装
1、终端:pip install Django
2、进入Python环境:
import django
django get_version()
二、创建项目
1、创建一个目录(文件夹),终端进入该目录:
django-admin startproject projectName
2、(查看目录层级)
tree . /F # 终端
manage.py 命令行工具,可以多种方式对Django项目进行交互
__init__.py 表示该目录可被看做是一个包
settings.py 项目配置文件
urls.py 项目URL声明
wsgi.py 项目与wsgi兼容的web服务器入口
3、配置数据库(MySQL)
Django默认使用SQLite
配置MySQL:
(1)
import pymysql # __init__.py
pymysql.install_as_MySQLdb()
(2)
DATABASES = { # settings.py
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': “DataBaseName”,
'USER':'root',
'PASSWORD':' ',
'HOST' : 'localhost',
'PORT': '3306'
}
}
4、创建应用(可创建多个应用,每个应用进行一种业务处理)
(1)、终端:进入项目目录
python manage.py startapp AppName
应用目录说明:
admin.py 站点配置
views.py 视图
models.py 模型
(2)激活
在settings.py中将appName加入INSTALLED_APPS中
(3)定义模型
一个数据表 对应 一个模型
models.py中引入
from django.db import models # 模型类要继承models.Model 类
创建模型类
class Grades(models.Model):
gname = models.CharField(max_length=50)
date = models.DateTimeField()
def __str__(self):
return "%s" % (self.gname)
class Stus(models.Model):
sname = models.CharField(max_length=50)
sgrade = models.ForeignKey("Grades")
注: 不需要定义主键,在生成时自动增加。
(4)在数据库中生成数据表
以管理员身份打开终端,进入MySQL:
mysql -u root -p;
show databases;
create databases databaseName;
迁移文件:在项目目录下
python manage.py makemigrations # 在migration目录下生成一个迁移文件,此时数据库中还未生成表
执行迁移:
python manage.py migrate # 相当于执行SQL语句,生成表
mysql下:
use databaseName;
show tables;
desc table_name; # 查看创建的表结构
select * from SC_grades;
(5)测试数据操作
进入Python shell
python manage.py shell
引入包:
from appName.models import Grades, Stus
from django.utils import timezone
from datetime import *
查询所有数据
Grades.objects.all()
添加数据: 创建一个模型类的对象实例
grade1 = Grades()
grade1.gname = "python"
grade1.gdate = datetime(year=2017, month=1, day=1)
grade1.save()
查看某个对象:
Grades.objects.get(pk=2)
修改对象:
模型对象 . 属性 = 新值
grade2.gboynum = 40
grade2.save()
删除数据:
grade2.delete() # 物理删除,数据库中的表中的数据被删除
关联对象:
stu = Stus()
stu.name = "shit"
stu.sgrade = grade1 # 关联
stu.save()
获取关联对象的集合(终端)
获取该班所有学生: grade1.stus_set.all()
创建属于该班的某学生 :
stu4 = grade1.stus_set.create(sname = "shittt")
stu3 = grade2.students_set.create(sname = u'bob', sgender=True, sage = 12, scontent= u'ddddddddddddddddd')
启动服务器 (这是一个纯Python写的轻量级web服务器,仅在开发开发测试中使用。)
python manage.py runserver ip:port # ip:port 默认本机ip ,端口默认8000
Admin站点管理:(localhost:8000/admin)
配置:settings.py/ installed_app, 添加 django.contrib.admin
创建管理员用户:
python manage.py createsuperuser # enter username pwd email
汉化:
# settings.py
language_code = ' zh-Hans ' time_zone = 'Asia/Shanghai'
管理数据表:
修改admin.py
from .models import Grades, Stus
admin.site.register(Grades)
admin.site.register(Stus)
自定义管理页面:
属性说明:
列表页
list_display: 显示字段
list_filter: 过滤字段
search_fields: 搜索
list_per_page: 分页
添加修改页属性: (二者不可同时使用)
fields : 属性的顺序
fieldsets: 给属性分组
关联对象:
创建班级时直接添加学生
# admin.py
class StudentsInfo(admin.TabularInline): # StackedInline
model = Students
extra = 2 # 学生个数
使用装饰器完成注册:
@admin.register(Students) # admin.py
class StudentAdmin(admin.ModelAdmin):
# admin.site.register(Students, StudentAdmin)
___________________________________________admin管理页面end______________________________________________________
视图的使用:
在Django中,视图对web请求进行回应
视图就是一个Python函数 在views.py中定义
from django.http import HttpResponse
def index(request):
return HttpResponse("how you doing man")
配置URL:
修改project子目录下的urls.py
在应用目录下创建urls.py # F:\CODE\Django\School\SC
模板的使用:
模板是HTML页面,可根据视图中传递的数据进行填充
创建模板: 在project目录下创建templates目录,在该目录下创建对应项目的模板目录
配置路径:
TEMPLATES = [ # settings.py
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
定义grades和students.html两个模板
语法: {{ 输出值,可以是变量,也可以是 对象.属性 }}
{% 执行代码段%}
http://localhost:3320/grades
1、写grades.html模板
2、定义视图
def grades(request): # School/SC/views.py
# 去模板取数据
gradesList = Grades.objects.all()
#将数据传递给模板,模板在渲染页面,将渲染好的页面返回浏览器
return render(request, 'SC/grades.html', {"grades": gradesList})
3、配置url
url(r'^grades/$', views.grades)
点击班级,显示对应班级的所有学生:
1、视图
def gradesStudents(request,num): # SC/views.py
# 获取对应的班级对象
grade = Grades.objects.get(pk=num)
# 获取对应班级下的所有学生列表
studentsList = grade.students_set.all()
return render(request, 'SC/students.html', {"students": studentsList})
2、url
url(r'^grades/(\d+)/$', views.gradesStudents),
————————————————————end————————————————————
若要重新迁移文件,先把迁移文件删掉(School\SC\migrations\0001_initial.py),然后删掉对应数据库,之后再迁移。
若要增加表,先在应用目录下的models.py 添加类,然后再迁移文件,执行迁移,
若要增加表中字段或表中其他修改,建议删表重建。