zoukankan      html  css  js  c++  java
  • Django笔记

    Django:
    *各语言通用web架构MVC
    Model(模型): 数据存储层, 管理数据的.
    View(视图): 表现层, 展示页面内容.
    Controller(控制器): 业务逻辑层, 中间调节人.

    *Python的web架构MTV(各模块与MVC只是名字叫法不一样, 功能是一样的)
    Model(模型): 数据存储层.
    Templete(模板): 表现层.
    View(视图): 业务逻辑层.

    *安装Django: pip install Django==1.11.4

    *Django创建项目目录: 创建文件夹"Django项目" → 黑屏终端cd到该目录 → 输入命令django-admin startproject 名称

    *查看目录层级: tree . /F
    manage.py: 一个命令行工具, 可以使我们用多种方式对Django项目进行交互.
    project目录: __init__.py: 一个空文件, 它告诉python这个目录应该被看作一个python包.
    settings.py: 项目的配置文件.
    urls.py: 项目的URL声明.
    wsgi.py: 项目与WSGI兼容的web服务器入口.

    *创建项目
    1.设计表结构
    a.班级表结构
    表名: grades
    字段: 班级名称(gname), 女生总数(ggirlnum), 男生总数(gboynum), 是否删除(isDelete)
    b.学生表结构
    表名: students
    字段: 学生姓名(sname), 学生性别(sgender), 学生年龄(sage), 学生简介(scontent), 所属班级(sgrade), 是否删除(isDelete)
    2.配置数据库
    注意: Django默认使用SQLite数据库.
    如何配置: 在settings.py文件中, 通过DATABASES选项进行数据库配置.
    配置MySQL
    python3.x安装的是PyMySQL
    在__init__文件中写入两行代码, 不写会报错: import pymysql 和 pymysql.install_as_MySQLdb()
    格式: DATABASES = {
    'default': {
    'ENGINE' : 'django.db.backends.mysql'
    'NAME' : '数据库名'
    'USER' : '用户名'
    'PASSWORD' : '数据库密码'
    'HOST' : '数据库服务器ip'
    'PORT' : '端口',
    }
    }
    3.创建应用
    在一个项目中可以创建多个应用, 每个应用进行一种业务处理.
    打开黑屏终端进入"Django项目"目录下的project目录.
    执行命令 python manage.py startapp myApp.
    myApp目录说明
    admin.py: 站点配置
    model.py: 模型
    view: 视图
    4.激活应用
    在settings.py文件中, 将myApp应用加入到INSATLLED_APPS选项中.
    5.定义模型
    概述: 有一个数据表, 就对应有一个模型.
    在models.py文件中定义模型: class Grades(models.Model)
    class Students(models.Model)
    说明: 不需要定义主键, 主键会在生成时自动添加, 并且值为自动增加.
    6.在数据库中生成数据表
    生成迁移文件并执行迁移: 黑屏终端cd到"Django项目"目录下的project目录,
    依次执行python manage.py migrate
    python manage.py makemigrations myApp
    python manage.py sqlmigrate myApp 0001
    python manage.py migrate

    注意: 如果是要更改某个表的字段之类的, 最好就是直接把数据库的表和迁移文件都干掉重新来, 如果是要新增一个表, 那就直接再生成一份迁移文件就额可以了.
    7.测试数据操作
    黑屏终端cd到"Django项目"目录下的project目录, 执行命令 python manage.py shell
    引入包: from myApp.models import Grades,Students
    查询所有数据: 类名.objects.all()
    添加数据
    本质: 是创建一个模型类的实例对象
    添加一个班级
    >>>grade1 = Grades()
    >>>grade1.gname = "python04"
    >>>grade1.ggirlnum = 3
    >>>grade1.gboynum = 70
    >>>grade1.save() # 保存提交到数据库, 创建或修改数据最后都要.save()提交到数据库.
    添加一个学生
    >>>stu1 = Students()
    >>>stu1.sname = "Alick"
    >>>stu1.sgender = True
    >>>stu1.sage = 25
    >>>stu1.scontent = "我是Alick"
    >>>stu1.sgrade = grade1 # 外键关联
    >>>stu1.save()
    查看具体某一个数据: >>>Grades.objects.get(pk=2) # pk=2是主键为2的意思
    修改数据
    >>>grade1.gboynum = 60
    >>>grade1.save()
    删除数据(物理删除, 数据库中的表里的数据被删除了)
    >>>grade1.delete()
    8.关联对象
    获得关联对象的集合: 对象名.关联的类名小写_set.all()
    例: grade1.students_set.all() # 获取python04班级所有的学生.
    需求: 创建学生"Tom"属于python04班级
    ==> stu2 = grade1.students_set.create(sname="Tom", sgender=True, scontent="I'm Tom", sage=28) # 这里是直接添加到数据库中了, 不需要save.

    9.启动服务器
    格式: python manage.py runserver ip:port
    注意: ip和port不写就是默认的本机ip和8000端口.
    说明: 这是一个纯python写的轻量级的web服务器, 仅仅在开发测试中使用.
    10.Admin站点管理
    概述: 内容发布(负责添加、修改和删除内容)和公告访问.
    配置Asmin应用: 在settings.py的INSTALLED_APPS中添加'django.contrib.admin', 默认是已经添加好的.
    创建管理员用户: 执行 python manage.py createsuperuser, 建立用户名密码邮箱.
    汉化: 修改settings.py文件, LANGUAGE_CODE = 'zh-Hans', TIME_ZONE = 'Asia/Shanghai'.
    管理数据表
    修改admin.py文件
    from .models import Grades,Students # .models是代表当前目录下的models
    # 注册
    @admin.register(Grades)
    class GradesAdmin(admin.ModelAdmin):
    pass
    @admin.register(Students)
    class StudentsAdmin(admin.ModelAdmin):
    pass
    自定义管理页面
    # 列表页属性
    list_display: 显示字段
    list_filter: 过滤字段
    search_fields: 搜索字段
    list_per_page: 分页
    # 添加、修改页属性, 不写就是默认的.(fields、fieldsets二者只能用其一)
    fields: 可以调整属性的先后顺序
    fieldsets: 把属性分组展示
    布尔值显示问题
    def stu_gender(self):
    if self.sgender:
    return "男"
    else:
    return "女"
    # 设置页面列的名称
    stu_gender.short_description = "性别"
    list_display = [stu_gender]
    执行动作的位置
    # 修改执行动作的位置(顶部或者底部)
    actions_on_top = False
    actions_on_bottom = True

    11.视图的基本使用
    概述: 在Django中, 视图对web请求进行回应, 视图就是一个python函数, 在views.py文件中定义.
    定义视图
    from django.http import HttpResponse
    def index(request):
    return HttpResponse("alick is a good man")
    配置url
    修改project.py目录下的urls.py文件(include函数需要导入进来): url(r'^', include("myApp.urls"))
    在myApp应用目录下创建一个urls.py文件
    from django.conf.urls import url
    from . import views
    urlpatterns = [
    url(r'^$', views.index)
    ]
    12.模板的基本使用
    概述: 模板是html页面, 可以根据视图中传递过来的数据进行填充.
    创建目录模板: 创建templates目录, 在目录下创建对应项目的模板目录(project/templates/myApp)
    配置模板路径: 修改settings文件下的TEMPLATES: 'DIRS': [os.path.join(BASE_DIR, "templates")]
    创建并定义grades.html和students.html模板
    模板语法1: {{ 输出值, 可以是变量, 也可以是对象.属性 }}
    模板语法2: {% 执行python代码段 %}
    模板语法3: {# 注释 #}
    http://127.0.0.1:8000/grades
    写grades.html模板
    定义视图: def grades(request)
    配置url: url(r'^grades/$', views.grades)
    http://127.0.0.1:8000/students
    写students.html模板
    定义视图: def students(request)
    配置url: url(r'^students/$', views.students)
    注意: 模板路径和url路径是两个不同的东西.

    *ORM
    概述: 对象关系映射(object-relation-mapping)
    任务
    根据对象的类型生成表结构
    将对象、列表的操作转换为sql语句.
    将sql语句查询到的结果转换为对象、列表.
    优点: 极大地减轻了开发人员的工作量, 不需要面对因数据库的变更而修改代码.


    *模型
    模型、属性、表、字段间的关系: 一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的字段.
    定义属性: 各种字段类型
    创建模型类
    元选项
    在模型类里面再定义Meta类, 用于设置元信息
    db_table: 定义数据表名, 若不定义数据表名, 则默认会使用"项目名小写_类名小写"来定义表名.
    ordering: 对象的默认排序字段
    ordering["id"]: 升序
    ordering["-id"]: 降序
    模型成员
    objects: 查询器, 是Manager类的一个对象, 作用是与数据库进行交互, 当定义模型类没有指定查询器, 则Django为模型创建一个名为objects的管理器.
    自定义管理器Manager类
    模型管理器: 是Django的模型与数据库进行交互的接口.
    自定义的作用: 可以向管理器类中添加额外的方法
    修改管理器返回的原始查询集, 重写get_queryset()方法.
    创建对象
    目的: 向数据库中添加数据
    本质: 当创建对象时, Django不会对数据库进行读写操作, 当调用save()方法时才与数据库交互, 将对象保存到数据库表中.
    注意: __init__方法已经在父类models.Model中使用, 在自定义的模型中无法使用. 没有__init__方法的模型创建的对象是空对象, 所以用这种方式来创建对象不是很方便.
    方法
    1. 在模型类中增加一个类方法
    class Students(models.Model):
    @classmethod
    def create_student(cls, name, age, gender, contend, grade, isD=False):
    stu = cls(sname=name, sage=age, sgender=gender, scontend=contend, sgrade=grade, isDelete=isD)
    return stu
    2. 在定义管理器中添加一个方法
    模型查询
    概述: 查询集表示从数据库获取的对象集合, 查询集可以有多个过滤器, 过滤器就是一个函数, 基于所给的参数限制查询集结果, 从sql角度来说, 查询集合select语句等价, 过滤器就像where条件.
    查询集
    在管理器上调用过滤器方法返回查询集.
    查询集经过过滤器筛选后返回新的查询集, 所以可以写成链式调用.
    惰性查询: 创建查询集不会带来任何数据的访问, 直到调用数据时才会访问数据.
    直接访问数据的情况: 迭代、序列化、与if合用.
    返回查询集的方法称为过滤器
    all(): 返回查询集中的所有数据
    filter(): filter(键=值, 键=值)
    exclude(): 过滤掉符合条件的数据
    order_by(): 排序
    values(): 一条数据就是一个对象(字典), 返回一个列表.
    返回单个数据
    get(): 返回一个满足条件的对象, 不符合会引发异常.
    count(): 返回当前查询集中的对象个数
    first(): 返回查询集中的第一个对象
    last(): 返回查询集中的最后一个对象.
    exists(): 判断查询集中是否有数据, 如果有数据则返回True.
    限制查询集
    查询集返回列表, 可以使用下标的方式进行限制(下标不能是负数), 等同于sql语句中的limit语句.
    studentList = Students.objects.all()[0:5]
    字段查询
    概述:
    概述: 实现了sql语句中的where语句, 作为方法filter()、exclude()、get()的参数.
    语法: 属性名称__比较运算符 = 值 , 外键是 属性名_id
    转义: like语句中使用%是为了匹配占位, 匹配数据中的%(where like '\%'), filter(sname_contains='%')
    比较运算符
    exact: 判断, 区分大小写, filter(isDelete=False)
    contains: 是否包含, 区分大小写, student_list = Students.object.filter(sname__contains="孙")
    startwith、endwith: 以values开头或结尾, 区分大小写, student_list = Students.object.filter(sname__startwith="孙")
    以上四个在前面加上i就表示不区分大小写: iexact、icontains、istartwith、iendwith.
    isnull/isnotnull: 是否为空, filter(sname__isnull=False)
    in: 是否包含在范围内, student_list = Students.object.filter(id__in=[2,4,6,8,10])
    gt/gte/lt/lte: 分别对应大于/大于等于/小于/小于等于, student_list = Students.object.filter(sage__gt=30)
    year/month/day/week_day/hour/minute/second: student_list = Students.object.filter(lastTime__year=2017)

  • 相关阅读:
    DAS存储未死,再次欲获重生
    Minimum edit distance(levenshtein distance)(最小编辑距离)初探
    AC自己主动机
    手动脱UPX 壳实战
    edge中断分析
    ubuntu默认的Python版本号修改
    Linux 下 pushd,popd,cd- 用法
    目标检测算法的历史及分类
    openjtag 的硬件连接踩坑历程
    ubuntu 16.04 python版本切换(python2和python3)
  • 原文地址:https://www.cnblogs.com/chenbin93/p/9255326.html
Copyright © 2011-2022 走看看