美文网首页记忆
django-喝茶开门(ಥ_ಥ)

django-喝茶开门(ಥ_ಥ)

作者: riverstation | 来源:发表于2018-07-07 09:19 被阅读13次

    Python Web开发Django-01

    一、基础知识

    • C/S与B/S
    • django框架
    • MVC
    • django的MTV

    二、项目构建

    • 环境
    • 搭建项目
    • 启动服务器
    • django请求流程

    三、项目目录结构

    四、自定义路由与请求处理函数

    作业

    一、基础知识

    C/S与B/S

    • C: Client 客户端
    • B: Browser 浏览器
    • S: Server 服务器

    浏览器是最常见的客户端,几乎所有平台上(安卓,Ios,Windows,MacOS,Linux,树莓派等嵌入设备)都有浏览器。

    单机到客户端与服务器,发展历史

    HTTP

    超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议。互联网从传输简单问文字,网页只包含文字,到包含多媒体。
    目前使用的版本是HTTP 1.1

    URL

    统一资源定位符,用于定位网络上某个资源,通过URL可以访问到对应的网络资源。

    常见格式:scheme://domain/path

    • scheme:协议,例如:http、https、ftp
    • domain:服务器地址,格式:域名或者IP:端口号。例如:127.0.0.1:8000;www.baidu.com
    • path:资源路径,指明要访问的资源在服务器上的位置。例如:/images/logo.png

    类似于电话号码,通过电话号码找到某个人,电话号码具有一定的格式

    服务器处理请求的流程

    请求-->路由-->业务处理函数-->数据库-->网页-->返回给客户端

    django框架

    地址:https://www.djangoproject.com/

    • 从2005初步完成,是开源框架
    • 重量级的python Web开发框架,内置了大量的模块工具
    • 使用的是MVC的设计思想

    MVC

    分工合作:盖房子,砌墙工,和水泥,砖头供应
    web开发中类似于盖房子,但是分为数据模型,视图,控制器

    全名是Model View Controller。是一种软件设计思想,用于将业务逻辑、数据、界面显示分离。

    • model 模型:用于管理业务数据,例如:数据库的增删改查
    • view 视图:用于显示业务数据
    • controller 控制器:用于从视图中获取数据,以及向model中发送数据,控制数据在视图中的展示

    MVT

    django使用的是MVC思想。使用MTV方式来实现MVC思想:

    • M:model 数据层,用户处理数据库操作
    • T:template 视图模板,用于显示数据
    • V:view 控制器,用处理用户请求,返回响应数据。

    二、项目构建

    环境

    ubuntu 16.04+python3 或者 MacOS 10+

    安装虚拟环境

    # 更新软件
    sudo apt-get update
    
    # 安装python3
    sudo apt-get install python3
    
    # 安装python3 pip
    sudo apt-get install python3-pip
    
    # 切换到home目录下
    cd ~
    mkdir DjangoProjects
    cd DjangoProjects
    
    # python虚拟换件管理工具
    sudo pip3 install virtualenv
    
    # 创建虚拟环境
    virtualenv -p python3 .djenv
    
    # 启动虚拟环境
    source ~/DjangoProjects/.djenv/bin/activate
    
    # 退出虚拟环境
    deactivate
    # 配置启动虚拟环境命令别名
    vim ~/.bashrc
    # 尾部添加
    # alias djenv=‘source ~/home/u/DjangoProjects/.djenv/bin/activate’
    
    # 启动虚拟环境
    djenv
    # 安装django库
    pip install django==1.11
    
    # 安装pylint-django
    pip install pylint-django
    
    # 查看已经安装的包
    pip freeze
    
    # 新建项目
    django-admin startproject Django01
    # 启动服务器
    cd Django01
    ./manage.py runserver
    # 打开浏览器访问 127.0.0.1:8000
    

    四、项目目录结构

    Django01/
        manage.py
        Django01/
            __init__.py
            settings.py
            urls.py
            wsgi.py
    

    Django01项目文件夹

    • manage.py:所有的django项目中默认都会创建这个文件,它是django项目的命令行管理工具。
    • Django01/Django01是一个python包,
    • Django01/Django01/__init__.py 是一个空文件,用户指明这个文件夹是python包
    • Django01/Django01/settings.py 项目的相关配置信息
    • Django01/Django01/urls.py 路由配置文件
    • Django01/Django01/wsgi.py 项目部署时用到的文件

    settings配置信息

    • DEBUG:开发环境下始终为True,只有在项目部署到生产环境时改为False
    • ALLOWED_HOSTS:允许被访问的主机
    • INSTALLED_APPS:需要安装的应用,django中自带了了一些应用已经,创建应用后,要把应用的名称加入到这里
    • ROOT_URLCONF:根路由文件
    • TEMPLATES:模板引擎配置信息
    • DATABASES:数据库配置信息

    Django请求流程

    请求-->路由-->处理函数-->数据库操作-->渲染模板-->返回响应数据

    类似于一家门厂。客户:想要买门。接单客服:接待客户。库房:找到对应的门。客服安排发货。

    • 请求由客户端发起
    • 路由负责对客户端发起的请求进行解析,找到对应的处理函数

    新建应用

    ./manage.py startapp MyApp

    MyApp/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py
    
    • admin.py:django自带的后台管理工具的相关配置
    • apps.py:这个应该相关配置信息
    • migrations/ :数据库迁移文件目录
    • models.py:存放数据模型
    • tests.py:测试文件
    • views.py:视图处理函数文件

    五、创建请求处理函数并绑定路由

    在views新建视图处理函数

    视图处理函数格式

    def hello_world(request):
        # 处理过程
        return HttpResponse('')
    

    第一个参数必须是request,并且每一个处理函数必须返回一个HttpResponse对象

    绑定路由

    from MyApp.views import hello_wolrd
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^hello_world$', hello_world),
    ]
    

    路由格式:url(正则匹配,处理函数名)

    浏览器中访问

    127.0.0.1:8000/hello_world

    子路由

    园区-->楼-->几层

    或者一家公司,前台-->分机号-->人

    from django.conf.urls import include
    from MyApp.views import hello_wolrd
    from MyApp import urls as myapp_urls
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^hello_world/', include(myapp_urls)),
    ]
    

    Python Web开发Django-02

    一、ORM是什么

    • 数据表
    • 面向对象
    • 对应关系

    二、在django中如何构建映射关系

    • 构建对应的model
    • 配置数据库
    • 迁移数据

    三、常用字段

    • 普通字段
    • 关联字段

    四、ORM的使用

    • 简单操作
    • 复杂操作
      • 关联数据
      • 数据查询
      • 数据更新
      • 数据删除

    作业

    一、ORM是什么

    ORM 对象关系映射,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

    数据操作请求-->ORM-->数据库(mysql,oracle,mssql,sqlite3...)

    不同数据库语法有差别,支持的功能不同

    数据库表

    • 表名
    • 字段
    • 数据记录

    面向对象

    • 类名
    • 属性
    • 对象

    结合起来

    类名<--->表名

    类属性<---->表字段

    对象<---->数据记录

    django中通过操作类和对象来实现对数据库表以及记录的操作

    二、在django中如何构建映射关系

    构建类与数据表的对应关系:构建model类-->生成迁移文件-->执行迁移

    构建model

    在MyApp下model.py中新增类,继承自django.db.models.Model

    class Student(models.Model):
        pass 
    

    这里的Student对应的是一张数据库表。

    为Student类添加属性,对应数据表的字段

    class ClassRoom(models.Model):
        name= models.CharField(max_length=32)
    

    数据表字段由字段名、字段类型、字段属性组成

    name-->字段名model.CharField-->字段类型max_length=32-->字段属性

    配置数据库

    安装mysql数据库

    安装mysql数据库:sudo apt-get install mysql-server

    创将数据库用户grant all on *.* to 'django'@'%' identified by 'djangopwd';

    创建数据库 create database django01 character set=utf8;

    安装连接mysql库

    • sudo apt-get install python3-dev libmysqlclient-dev
    • pip install mysqlclient

    在settings.py中修改默认的数据库

    django默认的数据库是sqlite

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'django01',#数据库名
            'USER': 'django',#数据库用户名
            'PASSWORD': 'djangopwd',#数据库用户密码
            'HOST': 'localhost',#数据库地址
            "PORT": '3306'#数据库端口号
        }
    }
    

    迁移数据

    # 生成迁移文件,生成的迁移文件在MyApp/migrations/下
    ./manage.py makemigrations MyApp
    # 执行迁移
    ./manage.py migrate
    

    三、字段

    普通字段

    • AutoField:自增长字段
    • CharField:字符串
    • IntegerField:整数
    • BooleanField:布尔
    • TextField:大文本
    • DateField:日期
    • DateTimeField:日期时间
    • FloatField:浮点

    关联字段

    • ForeignKey 多对一
    • ManyToManyField 多对多
    • OneToOneField 一对一 是特殊的多对一关系

    通用字段属性

    • null:默认是False,数据库中该字段是否可以为null
    • db_index:默认False,表示该字段是否构建索引
    • primary_key:默认False,是否主键
    • unique:默认False,该字段的值是否不能有重复
    • default:字段的默认值
    • blank:默认为False,通常使用在char或text类型上,表示是否可以存储'',它与null不同,null是数据库级别限制,blank是业务上的限制
    • help_text:帮助说明信息
    • choices: 接受一个遍历对象,对象中每一个元素是一个2位元素的元组;该字段的值只能从给出的列表中选一个,元组中第一个元素是保存到数据库中,第二个元素只是一个别名,例如:
    gender_choices = ( 
        ('male', '男'), 
        ('female', '女'), 
    )
    
    • db_cloumn:数据表字段名,默认情况下是属性名

    关联字段属性

    ForeignKey与OneToOneField:

    • on_delete:
      • models.CASCADE:级联删除,当主键删除时,所有关联的数据全部删除
      • models.PROTECT:保护,当删除主键时,假如还有关联数据,那么抛出异常
      • models.SET_NULL:主键删除时,将该字段设置为null
      • models.SET_DEFAULT:设置为默认值,但是必须在定义字段是给出默认值
      • models.SET():使用函数的返回值作为字段值
      • models.DO_NOTHING:什么都不做

    使用ORM管理数据

    每一个类都有一个默认的属性:objects,他是一个管理器

    django中执行数据库操作需要通过,类的属性objects执行

    简单操作

    创建数据

    两种方式创建一条数据

    obj=ClassRoom()
    obj.attr=value
    obj.save()
    

    创建一个类对象,对象属性赋值,执行保存

    数据更新

    obj.attr=value
    obj.save()
    

    更新对象属性,执行保存

    查询数据

    ClassRoom.objects.get()

    删除数据

    obj.delete

    复杂操作

    关联关系数据创建

    一对一

    多对一

    多对多

    数据查询

    字段特殊查询

    • age__lt=10: ==== where age < 10
    • age__lte=10: ==== where age <= 10
    • age__gt=10: ==== where age > 10
    • age__gte=10: ==== where >= 10
    • name__contains='tom': ==== where name like '%tom%'
    • name__icontains='tom': ==== where name ilike '%tom%'
    • name__startswith='tom': ==== where name like 'tom%'
    • name__istartswith='tom': ==== where name ilike 'tom%'
    • name__endswith='tom': ==== where name like '%tom'
    • name__iendswith='tom': ==== where name ilike '%tom'
    • age__in=[20,25,28]: ====where age in (20,25,28)
    • street__isnull=True: ==== where steert is null

    字段关联查询

    • classroom__name='1801': ==== WHERE blog.name='1801'
    • classroom__name__contains='1801': ==== WHERE blog.name like '%1801%'

    定义属性字段时,不可以使用包含__的名字

    Q

    命名参数查询对应到数据查询时,使用的是 and逻辑。如果要使用ornot,那么需要借助于Q

    Q实现or

    ClassRoom.objects.filter(name='1801',Q(bodys__gt=20)|Q(girls__lt=5))

    Q实现not

    ClassRoom.objects.filter(~Q(girls__lt=5))

    F

    F可以实现一条数据内部字段的比较,比如:

    ClassRoom.objects.filter(girls__gt=F('boys'))

    聚合查询

    • 平均值 Avg
    • 最大值 Max
    • 最小值 Min
    • 数量 Count
      Student.objects.aggregate(Avg('age'))

    更新多条数据

    ClassRoom.objects.filter(...).update(...)

    删除多条数据

    ClassRoom.objects.filter(...).delete()

    Python Web开发Django-03

    ORM补充

    • 关联数据的读取
      • 主表读取从表
      • 从表读取主表

    模板引擎

    • 模板引擎原理
    • 实现一个简单的模板引擎
    • 如何使用django自带的模板引擎
    • django模板引擎调用过程

    模板引擎语法

    • 模板构成
    • 注释
    • 变量打印
    • 条件判断
    • 循环
    • 乘除法
    • 转义
    • 过滤标签
    • 静态资源
    • 继承与block
    • 包含

    ORM补充

    一对一

    主--->从
    mobj.字段名 例如:student.desktop读取的是DeskTop对象

    从--->主
    sojb-->主类名小写 例如: desktop.student 读取的是Student对象

    多对一

    主-->从
    mobj.字段名 例如:student.classroom读取的是一个ClassRoom对象

    从-->主
    sobj-->主类名小写__set.过滤函数 例如:classroom1.student_set.all()

    多对多

    主-->从
    mobj.字段名.过滤函数 例如:author.book.all()读取的是一个数据集合对象

    从-->主
    sobj-->主类名小写__set.过滤函数 例如:book.author_set.all()

    模板引擎

    模板引擎原理

    模板包含两个部分:静态数据+动态数据

    构建特殊的文件,文件内容包含特殊的字符,使用处理函数将特殊字符替换成其他数据

    使用函数实现字符串替换

    s='''用户名:name;年龄:age'''
    def render(name,age):
        result = s.replace('name',str(name)).replace('age',str(age))
        return result
    

    如何使用django自带的模板

    django自带的模板引擎执行流程:加载模板,导入参数,模板渲染

    模板引擎配置

    函数中调用模板引擎

    模板语法

    网页模板包含两个部分:网页原始内容+模板语法

    注释

    网页原始注释: ``

    单行注释: {# 注释内容 #}

    多行注释: {% comment %} 注释内容 {% endcomment %}

    变量打印

    {{变量名}}

    条件判断

    {% if xxx %}
    {% elif xxx %}
    {% else %}
    {% endif %}
    
    {% ifequal a b %}
    {% endifequal%}
    
    {% ifnotequal a b %}
    {% endifnotequal%}
    
    

    循环

    {% for item in items %}
    {% endfor %}
    
    {% for item in items %}
    {% empty %} 
    {% endfor %}
    
    

    乘除法

    django模板引擎不能够直接使用变量的相乘以及相除

    {% widthratio 数值变量 分母 分子 %}

    转义

    {% autoescape off|on %}

    {% endautoescape %}

    过滤标签

    • safe:不对变量数据进行转义
    • join:把元素连接起来,相当于 ''.join(var)
    • length:获取变量的长度 相当于 len(var)

    静态资源

    配置django静态文件夹路径
    STATICFILES_DIRS=[os.path.join(BASE_DIR,'static_path')]

    模板中使用{% load static %} {% static 资源位置 %}

    继承

    {% extends 父模板名称 %}

    {% block block_name %} {% endblock %}

    包含

    {% include 模板名称 %}

    Python Web开发Django-04

    课程内容

    路由规则

    • 固定位置参数
    • 命名参数

    请求与响应

    • 请求
    • 响应

    路由规则

    给函数传递参数常用方式:func(arg1,arg2,arg3...),func(key=value,key2=value2,key3=value3...)

    固定位置参数

    url(r'path/(\d{4})/(\d{1,2})/(\d{1,2})',view_name)

    view_name(request,arg1,arg2,arg3)

    命名参数

    url(r'path/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})',view_name)

    view_name(request,month,day,year)

    请求与响应

    请求

    request是HttpRequest对象,包含用户请求的所有信息

    属性

    • GET:字典类型,包含的是url中包含的请求参数
    • POST:字典类型,如果与post方式上传一个表单数据,上传的表单数据保存在request.POST中
    • FILES:字典类型,如果客户端通过表单上传了文件,那么文件信息保存在request.FILES中
    • method:客户端使用的请求方法
    • scheme:客户端请求使用的协议
    • path:客户端请求的路径
    • encoding:客户端数据使用的编码
    • content_type:客户端上传数据所使用的数据格式,常见:application/json; multipart/form-data;
    • COOKIES:字典格式,客户端请求所带的cookie
    • META:包含请求头

    方法

    • read:读取请求体
    • is_ajax:判断是否是ajax
    • is_secure:判断是否是使用HTTPS协议

    响应

    每一个函数的返回值必须是一个HttpResponse对象

    构造函数常用参数:

    • content:响应体
    • content_type:响应体数据类型,例如:application/json
    • status:响应的状态码
    • reason:状态码说明

    相关文章

      网友评论

        本文标题:django-喝茶开门(ಥ_ಥ)

        本文链接:https://www.haomeiwen.com/subject/rubpuftx.html