Django的基本流程(依据个人Django技能熟练度而整理的笔记)

本文内容是个人笔记,摘自《千锋python教程:Django基础到实战讲解(精华版)》视频。

千锋教育的老师使用的是:Python版本3.6x;Django版本1.1.4;

我使用的是:Python版本3.6.4;Django版本2.1b1;硬件环境:win10电脑;软件环境:PyCharm;

进入某目录下创建项目(自动创建文件夹):

    D:\qfdjango\01-sunck>django-admin startproject project

查看目录树状层级:

    D:\qfdjango\01-sunck>tree . /F

配置数据库:配置mysql数据库时,需要在__init__.py文件中写入2句代码。

在settings文件中配置数据库时,mysql里没有数据库,需要在数据库里建一个数据库。

Settings文件里需要配置的关于数据库的内容示例:

启动mysql数据库:

    C:\WINDOWS\system32>net start mysql57

登陆服务器:

    C:\WINDOWS\system32>mysql -u root -p

选中数据库:use 库名

删除数据库:drop database 库名

创建数据库:create database 库名

项目根目录下,创建app:D:\qfdjango\01-sunck\project>python manage.py startapp myApp

App目录说明:admin站点配置;models模型;views视图;

创建完app需要在settings文件里配置一下:

要与数据库里的进行交互,需要先建立模型,和映射模型:models.py

其中”关联外键”那里,on_delete根据自己的需求添加(因为django版本不同,报错了,自己百度后添加的参数)。

【也可以在项目目录下(不是app目录)命令python manage.py makemigrations来生成迁移文件:D:\qfdjango\01-sunck\project>python manage.py makemigrations;

命令python manage.py migrate来执行迁移文件:D:\qfdjango\01-sunck\project>python manage.py migrate;】

在映射/生成数据库表时,如果想修改表结构,最好把迁移文件和数据库生成的表都删除,重新生成数据库表。myApp/migrations目录下是迁移文件。

查看数据库中的表:use 库名;show tables;展示表。

 展示表结构:desc myapp_student;

测试数据操作:

进入django的python shell用 命令python manage.py shell来进入。

引入包(需要什么类型数据导入什么包,如datetime):

    from appname.models import tablename,tablename # tablename是models中的类名

    from django.utils import timezone

    from datetime import *

查询所有数据:class/tablename.objects.all() # 只能查看有没有数据,不能查看有什么数据,如果想查看有什么数据,需要修改models中需要查看的类(在下面添加代码 # 注意安全性待考证)

查看单条数据:taxon/tablename.objects.get(pk=num) # num是哪一条数据。

添加单条数据:

变量name = 类名() # 类名是需要实例化的models中的类名

变量name.modelVariablename = 需要添加的数据

变量name.save() # 保存到数据库

可以把图片中的代码写在一个文件中去执行。

修改数据和添加数据差不多,类似python中修改变量的值,用save()提交到数据库。

模型对象.属性 = 新值

删除某条数据:变量name.delete() # 物理删除,数据库里的数据会被删除。

出现第二行格式的内容说明删除成功。

让两个表中的数据关联:变量name.关联的主键 = 对象名

变量name = 对象名.students_set.create(**kargs) # 一次性添加关联数据,不用save()。

查看数据库中某张表的所有数据:

添加了一条数据之后再去django-shell中查看:

Models中更改执行Grades.objects.all()时的展示格式:

更改后的显示格式:(更改后需要先重进shell)

在学生表中添加数据,使其与班级表关联:

查看某一班级的所有学生:

启动django服务器:命令格式:python manage.py runserver ip port

ip可以不写,不写代表本机ip

端口号默认8000,可以修改,在启动服务器时填写其他port就是修改;

# 这是一个轻量级服务器,项目上线时会使用其他服务器,而不是django自带的。

启动成功后网站显示:

admin站点管理:(为了方便管理数据)

添加admin应用:在settings文件中INSTALLED_APPS下添加'django.contrib.admin'。默认django已经给添加好了。

cd到项目目录下执行python manage.py createsuperuser创建超级管理员,依次输入登录名、邮箱、密码。

浏览器端输入http://127.0.0.1:8000/admin/进入管理员登陆界面,用自己创建超级管理员时的登陆名和密码登陆。

汉化admin后台:修改 settings.py下的LANGUAGE_CODE = 'zh-hans' # 汉语

TIME_ZONE = 'Azia/Shanghai' # 上海时间

管理数据表:

修改admin.py文件:

导入两个表:from .models import Grades,Students # .models 当前目录下 的models

注册:admin.site.register(models里的类名)

修改admin.py文件之前网站后台的显示:

修改admin.py中的内容,使数据可以在admin后台进行管理:

自定义管理界面的admin.site.register(models里的类名,类名) # 自定义管理界面的类需要继承admin.ModelAdmin。

自定义管理界面:

属性说明:

列表也属性:

    list_display:[需要显示的字段,] # 列表形式
    list_filter:[过滤字段,]
    search_fields:[搜索字段,] # 可以按什么字段查找
    list_per_page:num # 分页,每num条是一页显示。

添加、修改页属性:
    fields:[,] # 修改属性的先后顺序

未修改添加页面时,页面的样子:

需要修改的代码:

修改之后django会依照admin文件中的代码自动将修改页改变,按列表给出的顺序进行排列。

fieldsets: # 给属性分组

fieldsets = [ # 例子

('num',{'fields':['ggirlnum','gboynum']}),

('base',{'fields':['gname','gdate','isDelete']}),

]

修改‘增加grades’添加页面默认展现方式之后的样子:

# fields与fieldsets不能同时使用

自定义添加学生页面:

使其在创建班级时,可以同时添加两个学生,admin中需要修改的代码:

admin.StackedInline与admin.TabularInline的显示方式会不一样,前者竖排显示,后者横排显示。

将性别的展示方式,从true和false改为男和女:

自定义字段/列的名称:

修改完之后页面的显示效果:

修改执行动作的位置:

修改玩执行动作后,页面的变化:

以装饰器的方式进行注册:

自定义视图/视图的基本使用:

修改project文件下的urls文件,让它做一个转接任务:

在myApp文件下创建urls.py文件,并在里面加入代码,它做的是返回视图操作:

url中正则匹配的时从端口号之后开始匹配,端口号之前不会匹配。

正则表达式r’^$’

^从某字符开始,$到某字符结束,因为^和$之间没有字符,所以匹配的是127.0.0.1:8000

正则表达式 r’^(\d+)/(\d+)$’

(\d+)一组数字,()括号里匹配到的字符为一组。

这个匹配到的网址是127.0.0.1:8000/数字/数字(其中数字是任意长的数字串)

显示结果:

模板的基本使用:

在项目根目录的project文件夹下创建一个templates文件用来存放模板。

在settings.py文件中添加圈中的代码:

BASE_DIR是项目的根目录,将两个join在一起,就拼接成了模板目录;

模板语法:
    {{ 输出值,可以是变量,可以是对象.属性 }}
    {% 执行代码或代码段 %}

在myApp下建立一个html文件,写下下面的代码。

这个html文件就是一个模板。

在项目app的urls文件中添加代码来做模板的url分发:

在app目录下的views.py文件中添加下面的代码,用来向模板里返回数据。

①写页面模板;②写视图;③配置url分发;

一个url匹配一个视图。

在myApp目录下创建一个学生模板(HTML文件):

urls.py链接分发器下返回学生模板url:

学生模板在视图中的函数:(前端页面根据返回的字典参数的名字来区分返回的数据。)

在班级页面点击班级时,显示班级中学生的信息:

views.py文件中需要修改:

urls.py文件中需要修改:

=============================================================================

在映射/生成数据库表时,如果要修改表结构,最好把迁移文件和数据库生成的表都删除,重新生成数据库表。myApp/migrations目录下是迁移文件。

 

流程:

    →创建工程

    →创建项目app

    →激活项目(setting文件中设置)

    →配置数据库(__init__.py和setting文件)

    →创建模型类(一个模型类都在数据库中对应一张数据库表。)

    →生成迁移文件

    →执行迁移文件

    →配置站点

    →创建模板目录/项目模板目录

    →配置模板路径(setting文件中)

    →修改project下的urls文件

    →在项目app目录下创建urls.py文件。

使用模型类进行增删改查(crud)操作。

在之后的Django项目中,可以通过修改几项来使用根据基本流程所写的Django项目雏形。
    1.在setting.py里修改原先的数据库名,为以后要使用的数据库名
    2.在setting.py里修改原先的数据库密码为以后自己要使用的数据库密码
    3.删除迁移文件
    4.在数据库创建对应第一步(以后要使用的)的数据库
    5.执行命令生成迁移文件,执行迁移文件
    6.启动服务,浏览器测试

Django模型部分简单示例:

Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用api,可以根据不同的业务需求选择不同的数据库。

配置数据库:

修改工程目录下的__init__.py文件:

修改setting.py文件:

使用模型类进行增删改查(crud)操作。

ORM:
    概述:对象·关系·映射
    任务:根据对象的类型生成表结果(迁移的时候)。
        将对象、列表的操作转换为sql语句。
        将sql语句查询到的结果转换为对像、列表。
    优点:极大的减轻了开发人员的工作量,不需要因数据库的变更而修改代码(如果需要修改代码,需要修改的部分也会很少)。
模型、属性、表、字段间的关系:一个模型类在数据库中对应一张表,在模型类中定义的属性对应该模型对照表中的一个字段。

定义属性:
    概述:
        Django根据属性的类型确定以下信息:
            ①当前选择的数据库支持字段的类型
            ②渲染管理表单时使用的默认html控件
            ③在管理站点最低限度的验证
        Django会为表增加自动增长的主键列,每个模型只有一个主键列,如果使用选项 设置某属性为主键列后,则Django不会再生成默认的主键列。
        属性命名限制:
            ①不能时python的保留关键字(遵循标识符规则)
            ②由于django的查询方式,不能使用连续的下划线

库:

    定义属性时,需要字段类型被定义在django.db.models.fields目录下,为了方便使 用,被导入到django.db.models中。

    使用方式:
        ①导入from django.db import models
        ②通过models.Field创建字段类型的对象,赋值给属性

逻辑删除:
对于重要数据都做逻辑删除,不能物理删除,实现方式是定义isDelete属性,类型 为BooleanField,默认值为False。

字段类型:
    AutoField:
        一个根据实际ID自动增长的IntegeField,通常不指定
        如果不指定,一个关键字段将自动添加到模型中

    CharField(max_length=最大长度):字符串,默认的表单样式是TextInput

    TextField:大文本字段,一般超过4000字节使用,默认的表单控件是Textarea文本域

    IntegerField:整数

    DecimalField(max_digits=None,decimal_places=None):
        使用python的Decimal实例表示的十进制浮点数
        参数说明:
            DecimalField.max_digits:位数总数
            DecimalField.decimal_places:小数点后的数字位数

    FloatField:用python的float实例来表示的浮点数。

    BooleanField:True/false字段,此字段的默认表单控件是CheckboxInput。

    NullBooleanField:支持null、true、false三种值。

    DateField([auto_now=False,auto_now_add=False]):
        使用Python的datetime.date实例表示的日期。
        参数说明:
            auto_now:每次保存对象时,自动设置该字段为当前时间,用于”最后一次修改” 的时间戳,他总是使用当前日期,默认为false。
            auto_now_add:当对象第一次被创建时自动设置为当前时间,用于创建时的时间戳,它总是使用当前日期,默认为false。
        说明:该字段默认对应表单控件是一个TextInput,在管理员站点添加了一个 JavaScript写的日历控件,和一个”Today”的快捷按钮,包含了一个额外的 invalid_date错误消息键。
        注意:auto_now_add,auto_now,and default这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。

TimeField:使用python的datatime.time实例表示时间,参数同DtaeField。

DateTimeField:使用python的datetime.datetime实例表示时间和日期,参数同DateField。

FiledField:一个上传文件的字段。

ImageField:继承了FileField的所有属性和方法,但对上传对象进行校验,确保它是个有效 的image。

字段选项/字段参数
    概述:
        通过字段选项,可以实现对字段的约束。
        在字段对象时通过关键字参数指定。
    null:如果为True,Django将空值以null存储到数据库中,默认值时False。
    blanke:如果为True,则该字段允许为空白,默认值是False。
    注意:null是数据库范畴的概念,blank是表单验证范畴的。
    db_column:字段的名称,如果未指定,则使用属性的名称。
    db_index:若值为True,则在表中会为此字段创建索引。
    default:默认值。
    primary_key:是否是主键。若为True,则该字段会成为模型的主键字段。
    unique:如果为True,这个字段在表中必须有唯一值。唯一约束/唯一值。

关系
    分类:
        ForeignKey:一对多,将字段定义在多的端中。
        ManyToManyField:多对多,将字段定义在两端中。
        OneToOneField:一对一,将字段定义在任意一端中。
    用一访问多:
        格式:对象.模型类小写_set
        示例:grade.students_set
    用一访问一:
        格式:对象.模型类小写
        示例:grade.students
    访问id:
        格式:对象.属性_id
        示例:students.sgrade_id
定义模型类:

元选项:在模型类中定义Meta类,用于设置信息。
    db_table:定义数据表名,推荐使用小写字母,如果不写,数据表名默认为项目名小写 _类名小写。
    ordering:对象的默认排序字段,获取对象的列表时使用。排序会增加数据库的开销。

模型成员:
    类属性:类里面的变量就是类属性。
        object:是Manager类型的一个对象,作用是与数据库进行交互。(隐藏属性)
             定义模型类时,没有指定管理器,则为Django为模型创建一个名为object 的管理器。           

自定义管理器stuObj会取代默认管理器object。

 

【本文是个人笔记,仅供参考,不推荐在实际工作中应用。如果像系统学习Django,推荐你在自强学堂-Django教程学习】

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值