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)

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/chenbin93/p/9255326.html
Copyright © 2011-2022 走看看