一、Django 安装
1、Django 版本对应的 Python 版本:
2、Django下载地址:
3、安装(无需下载)
4、验证安装
cmd进入python
获取版本信息
二、创建第一个项目
1、在合适位置创建一个目录
2、打开DOS进入到上一步创建的目录下
3、输入:django-admin startproject project
4、目录层级说明
manage.py
__init__.py
settings.py
urls.py
wsgi.py
三、基本操作
1、设计表机构
a、班级表结构
表名:grade
字段:
b、学生表结构
表名:students
字段:
2、配置数据库
a、配置MySQL
python3.x安装的是PyMySQL
在__init__.py文件中写入两行代码
b、格式:
3、创建应用
a、打开cmd进入01-wj目录下的project的目录
b、执行:python manage.py startapp myAPP
c、myApp目录说明
admin.py
models.py
views.py
4、激活应用
5、定义模型
引入:from django.db import models
模型类要继承models.Model类
6、在数据库中生成数据表
a、生成迁移文件
b、执行迁移
7、测试数据操作
a、进入到python shell
b、执行:python manage.py shell
c、引入包:
d、查询所有数据
e、添加数据
f、查询某个对象
g、修改数据
h、删除数据
物理删除(真实删除!)
逻辑删除(isDelete = True)
I、关联对象
创建一个学生
获得关联对象的集合
创建一个学生属于‘’python04‘’班
8、启动服务器
a、格式:
b、说明:
9、Admin站点管理
a、概述:
内容发布
公共访问
b、配置Admin应用
c、创建管理员用户
d、汉化
10、管理数据表
a、修改admin.py文件
b、自定义管理页面
属性说明:
list_display
list_filter
search_fields
list_per_page
fields
fieldsets
关联对象
布尔值显示问题
执行动作位置
c、使用装饰器完成注册
11、视图的基本使用
a、概述:
b、定义视图
c、配置url
修改project目录下的url.py文件
在myAPP应用目录下创建一个urls.py文件
12、模板的基本使用
a、概述:
b、创建模板目录
c、配置模板路径
d、定义grades.html和students.html两个模板
模板语法
{{输出值,可以是变量,也可以是对象属性}}
{%执行代码段%}
e、http://127.0.0.1:8000/grades
写grades.html模板
定义视图
配置URL
f、http://127.0.0.1:8000/students
写students.html模板
定义视图
配置URL
g、点击班级,显示对应班级的所有学生
写students.html模板
定义视图
配置url
一、Django 安装
1、Django 版本对应的 Python 版本:


2、Django下载地址:
https://www.djangoproject.com/download/

3、安装(无需下载)
打开cmd,输入:pip install Django==1.11.4,然后回车


4、验证安装
cmd进入python
获取版本信息
import django
django.get_version()

二、创建第一个项目
1、在合适位置创建一个目录
2、打开DOS进入到上一步创建的目录下
CD C:\Users\Administrator\PycharmProjects\bilibili_qianfeng\bilibili_20200404\01-wj

3、输入:django-admin startproject project
查看目录结构:tree . /F


4、目录层级说明
manage.py
一个命令行工具,可以让你以各种方式与该Django项目进行交互

init.py
一个空文件,告诉Python该项目是一个Python包

settings.py
项目的配置文件

urls.py
项目的URL申明,一份由Django驱动的网站“目录”

wsgi.py
一个WSGI兼容的Web服务器的入口,以便运行你的项目

b、学生表结构
表名:students
字段:
学生姓名:sname
学生性别:sgender
学生年龄:sage
学生简介:scontend
所属班级:sgrade
是否删除:isDelete

2、配置数据库
注意:Django默认使用Sqlit数据库

在setting.py文件中,通过DATABASE选项进行数据库配置

a、配置MySQL
python3.x安装的是PyMySQL
在__init__.py文件中写入两行代码
import pymysql
pymysql.install_as_MySQLdb()
3、创建应用
在一个项目中可以创建多个应用,每个应用进行一种业务处理

a、打开cmd进入01-wj目录下的project的目录
b、执行:python manage.py startapp myAPP
c、myApp目录说明
admin.py
站点配置

models.py
模型

views.py
视图

4、激活应用
在setting.py文件中,讲myApp应用加入到INSTALLED-APPS选项中


5、定义模型
概述:有一个数据表,就应该对应一个模型
在models.py中定义模型

引入:from django.db import models
模型类要继承models.Model类
from django.db import models

# Create your models here.

class Grades(models.Model):
    gname = models.CharField(max_length=20)
    gdate = models.DateTimeField()
    ggirlnum = models.IntegerField()
    gboynum = models.IntegerField()
    isDelete = models.BooleanField(default=False)


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")

说明:不需要定义主键,在生成时自动添加,并且值为自动增加

6、在数据库中生成数据表
a、生成迁移文件
执行:python manage.py makemigrations

在migrations目录下生成一个迁移文件,此时数据库中还没有生成数据表


b、执行迁移
执行:python manage,py migrate

相当于执行sql语句创建数据表


7、测试数据操作
a、进入到python shell
b、执行:python manage.py shell


c、引入包:
from myAPP.models import Grades,Students
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.sname = “小明”
stu.sgender = False
stu.sage = 20
stu.scontend = “我叫小明”
stu.sgrade = grade1
stu.save()

获得关联对象的集合
需求:获取python04班级的所有学生
格式:对象名.关联的对象名_set.all()
grade1.students_set.all()

创建一个学生属于‘’python04‘’班
stu1 = grade1.students_set.create(sname=u’曾志伟’,sgender=True,scontend=u’我叫曾志伟’,sage=45)

不用save()直接就创建成功

8、启动服务器
a、格式:
python manage.py runserver ip:port
ip可以不写,不写的话代表本机ip
port端口号默认是8000
python manage.py runserver


b、说明:
这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用

9、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文件


10、管理数据表
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]
布尔值显示问题
class StudentsAdmin(admin.ModelAdmin):
    def gender(self):
        if self.sgender is True:
            return "男"
        else:
            return "女"
    # 设置页面列的名称
    gender.short_description = "性别"

    list_display = ['pk','sname','sage',gender,'scontend','sgrade','isDelete']
    list_per_page = 2
admin.site.register(Students,StudentsAdmin)
执行动作位置
class StudentsAdmin(admin.ModelAdmin):
    def gender(self):
        if self.sgender is True:
            return "男"
        else:
            return "女"
    # 设置页面列的名称
    gender.short_description = "性别"

    list_display = ['pk','sname','sage',gender,'scontend','sgrade','isDelete']
    list_per_page = 10
    # 执行动作的位置
    actions_on_top = False
    actions_on_bottom = True
admin.site.register(Students,StudentsAdmin)

c、使用装饰器完成注册
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
    def gender(self):
        if self.sgender is True:
            return "男"
        else:
            return "女"
    # 设置页面列的名称
    gender.short_description = "性别"

    list_display = ['pk','sname','sage',gender,'scontend','sgrade','isDelete']
    list_per_page = 10
    # 执行动作的位置
    actions_on_top = False
    actions_on_bottom = True
# admin.site.register(Students,StudentsAdmin)
11、视图的基本使用
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)
]
12、模板的基本使用
a、概述:
模板是HTML页面,可以根据视图中传递过来的数据进行填充

b、创建模板目录
创建templas目录,再目录下创建对应项目的模板目录(project/templates/myAPP)

c、配置模板路径
修改settings.py文件下的TEMPLATES

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
d、定义grades.html和students.html两个模板
模板语法
{{输出值,可以是变量,也可以是对象属性}}
{%执行代码段%}
e、http://127.0.0.1:8000/grades
写grades.html模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级信息</title>
</head>
<body>
    <h1>班级信息列表</h1>
    <ul>
        {%for grade in grades%}
        <li>
            <a href="#">{{grade.gname}}</a>>
        </li>
        {%endfor%}
    </ul>

</body>
</html>