Django - 基本入门
- 是一个开放源代码的 Web 应用框架,由 Python 写成
- 初次发布于 2005 年 7 月,并于 2008 年 9 月发布了第一个正式版本 1.0
MVC
MTV
Django 与 Python 版本对应关系
Django version Python versions 1.8 2.7,3.2(until the end of 2016),3.3,3.4,3.5 1.9,1.10 2.7,3.4,3.5 1.11 2.7,3.4,3.5,3.6 2.0 3.4,3.5,3.6 2.1 3.5,3.6,3.7 安装过程
- 进入黑屏终端
- 输入
pip install Django==1.11.4
- 验证是否安装成功
- 进入 python 环境
1
2
3>>> import django
>>> django.get_version()
'1.11.4'
- 进入 python 环境
打开黑屏终端,进入工程存放目录
1
django-admin startproject project
目录层级
- manage.py 文件
- 一个命令行工具,可以使我们使用多种方式对 Django 项目进行交互
- project 目录
__init__.py
:一个空文件,它告诉 Python 这个目录应该被看做一个 Python 包settings.py
:项目的配置文件urls.py
:项目的 URL 声明wsgi.py
:项目与 WSGI 兼容的 Web 服务入口
- manage.py 文件
设置表结构
数据库配置
- 注意:Django 默认使用的是 SQLite 数据库
- 通过
settings.py
文件中的DATABASES
选项进行配置 - 在
__init__.py
文件中添加以下代码1
2
3import pymysql
pymysql.install_as_MySQLdb() - 将
DATABASES
做如下修改1
2
3
4
5
6
7
8
9
10DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER': '用户名',
'PASSWORD': '密码',
'HOST': 'IP',
'PORT': '端口'
}
}
创建应用
- 在一个工程中可以创建一个或者多个应用,每个应用对应处理一类业务逻辑
- 黑屏终端进入工程目录下
1
python manage.py startapp myApp
激活应用
配置
settings.py
中的INSTALL_APPS
1
2
3
4
5
6
7
8
9INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp',
]
定义模型
概述
- 有一个数据表,就对应有一个模型类
在应用目录下的
models.py
文件中定义模型1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20from django.db import models
# Create your models here.
# 定义模型
class Grade(models.Model):
name = models.CharField(max_length=20)
boyNum = models.IntegerField()
girlNum = models.IntegerField()
isDelete = models.BooleanField(default=False)
class Student(models.Model):
name = models.CharField(max_length=20)
sex = models.BooleanField()
content = models.CharField(max_length=20)
age = models.IntegerField()
grade = models.ForeignKey("Grade")
isDelete = models.BooleanField(default=False)说明
- 不需要定义主键,在生成时自动添加,并且值为自动增长
生成数据表
数据测试
进入
python shell
模式1
python manage.py shell
引入包
1
from myApp.models import Student,Grade
增
1
2
3
4
5
6
7
8
9
10
11
12
13from myApp.models import Student,Grade
grade = Grade()
"zzpython1801" grade.name =
40 grade.boyNum =
10 grade.girlNum =
grade.save()
sut = Student()
"sunck" sut.name =
True sut.sex =
"sunck is a good man" sut.contend =
18 sut.age =
sut.grade = grade
sut.save()删
1
stu2.delete()
仅仅删除数据库中对应数据,程序中的对象依然可以使用
改
1
2
31) stu = Student.objects.get(pk=
19 stu.age =
stu.save()查
获取所有数据
1
stus = Student.objects.all()
获取一个数据
1
Grade.objects.get(pk=1)
启动服务
格式
1
python manage.py runserver ip:port
1.
ip
可以不写python manage.py runserver port
2. 端口号默认为 8000,可以修改python manage.py runserver 8080
说明
- 这是一个纯 python 编写的轻量级 web 服务器,仅在开发阶段中使用,稳定性低。
- 如果修改了文件不需要手动启动服务,会自动重启。如果删除文件需要手动重启服务。
视图的基本使用
概述
- 视图是对 WEB 请求进行的响应。
- 视图接收
request
对象作为第一个参数,包含了请求的信息,是由Django
服务构建而成的。 - 视图的本质就是一个函数,被定义在
views.py
文件中。
定义视图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20from django.shortcuts import render
from django.http import HttpResponse
from myApp.models import Student, Grade
# Create your views here.
def index(request):
return HttpResponse('<H1>Hello Django</H1>')
def students(request):
stus = Student.objects.all()
print(stus)
return HttpResponse("所有学生信息")
def grades(request):
gs = Grade.objects.all()
print(gs)
return HttpResponse("所有班级信息")路由配置
主路由:
关联子路由
1
2
3
4
5
6
7from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('myApp.urls')),
子路由
在应用目录下创建名为
urls.py
的文件作为子路由文件1
2
3
4
5
6
7
8
9# -*- coding:utf-8 -*-
from django.conf.urls import url
from myApp import views
urlpatterns = [
url(r'^$', views.index),
url(r'^students/$', views.students),
url(r'^grades/$', views.grades),
]
模板的基本使用
概述
- 模板是 HTML 页面,可以根据视图中传递的数据进行填充 (渲染)
创建模板存放目录
- 工程目录下创建名为 templates 的目录
- 在 templates 目录下创建对应应用目录
配置模板路径
1
2
3
4TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],定义模板
index.html
1
2
3
4
5
6
7
8
9
10
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>students.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<body>
<h1>学生信息</h1>
<ul>
{% for stu in stus %}
<li>{{ stu.name }}--{{ stu.age }}--{{ stu.grade }}</li>
{% endfor %}
</ul>
</body>
</html>grades.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级信息</title>
</head>
<body>
<h1>班级信息</h1>
<ul>
{% for grade in grades %}
<li>{{ grade.name }}</li>
{% endfor %}
</ul>
</body>
</html>
在
views.py
中使用模板文件基本使用
1
2
3def index(request):
# return HttpResponse('<H1>Hello Django</H1>')
return render(request, 'myApp/index.html')给模板传递数据并渲染后返回页面
1
2
3
4
5def students(request):
stus = Student.objects.all()
print(stus)
# return HttpResponse("所有学生信息")
return render(request, 'myApp/students.html', {"stus": stus})1
2
3
4
5def grades(request):
gs = Grade.objects.all()
print(gs)
# return HttpResponse("所有班级信息")
return render(request, 'myApp/grades.html', {"grades": gs})
扩展
点击班级展示对应班级的学生
模板
grades.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级信息</title>
</head>
<body>
<ul>
{% for grade in grades %}
<li><a href="/students/{{ grade.id }}/">{{ grade.name }}</a></li>
{% endfor %}
</ul>
</body>
</html>路由
1
url(r'^students/(\d+)/$', views.gradeStudents),
视图
1
2
3def gradeStudents(request, gid):
stus = Student.objects.filter(grade_id=gid)
return render(request, 'myApp/students.html', {"stus": stus})
- 期间修改模型,一般直接生成迁移文件再迁移即可。如果出现无法生成迁移文件或者无法迁移时:
- 第一种方案,删除数据,重新创建,删除所有的迁移文件重新操作。
- 第二种方案,删除有问题的迁移文件,修改迁移记录,再重新操作。