前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

django

作者头像
py3study
发布2020-01-17 16:29:21
1.6K0
发布2020-01-17 16:29:21
举报
文章被收录于专栏:python3python3
代码语言:javascript
复制
# Django
   - 中文教程文档: http://python.usyiyi.cn
- anaconda使用
   - conda list: 显示当前环境安装的包
   - conda env list: 显示安装的虚拟环境列表
   - conda create -n env_name python=版本号
   - 激活conda的虚拟环境
        - (Linux)source activate env_name
        - (window) activate env_name
   - pip install django==版本号
   
   
## 创建第一个Django程序流程
   - 命令行下启动Django
       1. django-admin startproject 项目名
       2. cd 项目名
       3. python manage.py runserver
   - pycharm下启动
       1. 需要配置
       
## 路由系统——urls
- 创建App
   - app: 负责一个具体业务或者一类具体业务的模块
   - 创建: python manage.py startapp app名称 

- 路由
   - 按照具体的请求url,导入相对应的业务处理模块的一个功能模块
   - Django的信息控制中枢
   - 本质上是接收的url和相应的处理模块的一个映射
   - 在接收url请求的匹配上使用了RE(1.8版本)
   - url的具体格式由urls.py所示
   
- 1.url匹配规则
   - 子url一旦被调用,则不会返回到主url(不会逆向匹配)
   - 正则依r开头,表示不需要转义,注意尖号(^: 以什么开头)和美元符号($: 以什么结尾)
        - '/one/two/three/' 配对 r'^one/'
        - '/oo/one/two/three/' 不配对 r'^one/'
        - '/one/two/three/' 配对 r'three/$'
        - '/one/two/three/oo/' 不配对 r'three/$'
        - 开头不需要有反斜杠(默认忽略)
   - 如果从上向下都没有找到合适的匹配内容,则报错
   
- 2.正常映射
   - 把某一个符合RE的url映射到事务处理函数中去

- 3.url中带参数映射
    - 在事件处理代码中需要由url传入参数,形如: /myurl/param中的param
    - 参数都是字符串形式,如果需要整数等类型需要自行转换格式
    
- 4.url在App中的处理
    - 如果所有应用url都集中 项目名/urls.py 中,可能导致文件的臃肿
    - 可以把urls具体功能逐渐分散到每个App中
        - 从Django.conf.urls 导入 include
        - 注意此时RE部分的写法
        - 添加include导入
    - 使用方法
        - 1. 确保include被导入
        - 2. 写主路由的开头url
        - 3. 写子路由
        - 4. 编写views函数
    - 同样可以使用参数
- 5.url中的嵌套参数
    - 捕获某个参数的一部分
    - ?: : 表示忽略此参数
    
- 6.传递额外参数
    - 参数不仅仅来自url,还可能是我们自己定义的内容
    
- 7.url反向解析
    - 防止硬编码
    - 本质上是对每一个url进行命名
    - 以后在编码代码中使用url的值,原则上都应该使用反向解析
    
## 视图
   - 视图即视图函数,接收web请求并返回web响应的事物处理函数
   - 响应指的是符合http协议要求的任何内容,包括json,string,html等

- 简单视图
   - Django.http给我们提供了很多和httpResponse类似的简单视图
   - 此类视图的使用方法基本类似,可以通过return语句作为直接反馈返回给浏览器
   - Http404为Exception子类,所以需要raise来使用

- HTTPResponse详解
   - 方法
        - init: 使用页内容实例化HTTPResponse对象
        - write(content): 以文件的方式写
        - flush(): 以文件的方式输出缓存区
        - set_cookie(key, value='', max_age=None, expires=None): 设置Cookie
            - key,value都是字符串类型
            - max_age是一个整数,表示在指定秒数后过期
            - expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSeriallizer时才可序列化
            - max_age与expires二选一
            - 如果不指定过期时间,则两个星期后过期
        - delete_cookie(key): 删除指定的key的cookie,如果key不存在则什么也不发生

- HTTPResponseRedirect
    - 重定向,服务器端跳转
    - 构造函数的第一个参数用来指定重定向的地址

- Request请求
    - request介绍
        - 服务器接收到http协议的请求后会根据报文创建HTTPRequest对象
        - 视图函数的第一个参数是HTTPRequest对象
        - 在Django.http模块中定义了HTTPRequest对象的API
    - 属性
        - path: 一个字符串,表示请求的页面的完整路径,不包含域名
        - method: 一个字符串,表示请求的使用的http方法,常用值包括: 'GET', 'POST'
        - encoding: 一个字符串,表示提交的数据的编码方式
            - 如果为None则表示使用浏览器的默认设置,一般为utf-8
            - 这个属性是可写的,可以通过修改他来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
        - GET: 一个类似于字典的对象,包含get请求方式的所有参数
        - POST: 一个类似于字典的对象,包含post请求方式的所有参数
        - FILES: 一个类似于字典的对象,包含所有的上传文件
        - COOKIES: 一个标准的Python字典,包含所有的cookie,键和值都为字符串
        - SESSION: 一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django启用会话的支持时才可用,详细内容见“状态保持”
    - 方法
        - is_ajax(): 如果请求是通过XMLHTTPRequest发起的,则返回True
    - QueryDict对象
        - 定义的django.http.QueryDict
        - request对象的属性GET,POST都是QueryDict类型的对象
        - 于Python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
        - 方法get(): 根据键获取值、只能获取键的一个值、如果一个键同时拥有多个值,则获取最后一个值
        - 方法getlist(): 根据键获取值,将键的值以列表返回,可以获取一个键的多个值
    - GET属性
        - QueryDict类型的对象
        - 包含get请求方式的所有参数
        - 与URL请求地址中的参数对应,位于?后面
        - 参数的格式是键值对,如key1=value1    
        - 多个参数之间,使用&连接,如key1=value1&key2=value2
        - 键是开发人员定下来的,值是可变的
    
    - POST属性
        - QueryDict类型的对象
        - 包含post请求方式的所有参数
        - 与form表单中的控件对应
        - 表单中控件必须有name属性,name为键,value为值
            - CheckBox存在一键多值的问题
        - 键是开发人员定下来的,值是可变的
    
- 手动编写视图
    - 实验目的
        - 利用Django快捷函数手动编写视图处理函数
        - 编写过程中理解视图运行原理
    
    - 分析:
        - Django把所有请求信息封装如request
        - Django通过urls模块把相应的请求跟事件处理函数连接起来,并把request作为参数传入
        - 在相应的处理函数中,我们需要完成两部分
            - 处理业务
            - 把结果封装并返回,我们可以使用简单HTTPRequest,同样也可以自己处理此功能
            
    - 系统内建视图
        - 可以直接使用
        
    
- Models模型
    - ORM(ObjectRelationMap) 
        - 把面向对象思想转换成关系数据库思想,操作上把类等价于表格
        - 类对应表
        - 类中的属性对应表中的字段
        - 在应用中的model.py文件中定义class
        - 所有需要使用ORM的class都必须是 model.Model 的子类
        - 字段的类型都必须使用 model.xx 不能使用Python中的类型
        - 在Django中,models负责跟数据库交互
    - Django连接数据库
        - 自带默认数据库sqllite3
            - 关系型数据库
            - 轻量级
        - 建议开发的时候使用sqllite3,部署用mysql之类的数据库
        - 切换数据库在settings中进行设置
                # django连接mysql
                DATABASE = [
                    'defalut': {
                        'ENGINE' : 'django.db.backends.mysql',
                        'NAME' : '数据库名',
                        'PASSWORD' : '数据库密码',
                        'HOST' : '数据库地址',
                        'PORT' : '数据库端口号',
                    }
                ]
        - 需要在项目文件下的__init__文件中导入pymysql包
                
                # 在主项目中的__init__文件中
                import pymysql 
                pymysql.install_as_MYSQLdb()
        
        - 数据库的迁移
            1. 在命令行中,生成数据迁移的语句(生成sql语句)
                    python manage.py makemigrations
            2. 在命令行中,输入数据迁移的指令
                    python manage.py migrate
                    # 如果迁移中出现没有变化或者报错,可以尝试强制迁移
                    python manage.py makemigrations 应用名
                    python manage.py migrate 应用名
            3. 对于默认数据库,为了避免出现混乱,如果数据库中没有数据,每次迁移前可以把系统自带的sqllite3数据库删除
            
            
### 查看数据库中的数据
  - 启动命令行: python3 manage.py shell
  - 在命令行中导入相对应的映射类
       - from 应用名.models import 类名
  - 使用objects属性操作数据库.objects
  
  - 常见的查找方法
    1. 通用查找格式: 属性名__(用下列内容) = 值
        - gt: 大于
        - gte: 大于等于
        - lt: 小于
        - lte: 小于等于
        - range: 范围
        - year: 年份
        - isnull: 是否为空   
    2. 查找等于指定值的格式: 属性名 = 值
    3. 模糊查找: 属性名__(用下列内容) = 值
        - exact: 精确大小
        - iexact: 不区分大小写
        - contains: 包含
        - startwith: 以...开始
        - endwith: 以...结尾
        
## 数据库表关系
   - 多表联查,利用多个表联合查找某一项信息或者多项信息
   
   
   
## 模板系统
- 步骤:
    - 在settings中进行设置: TEAMPLATES
    - 在teampltaes文件夹下编写模板并调用
- 模板-变量
    - 变量的表示方法{{var_name}}
    - 在系统调用模板的时候,会用相应的数据查找相应的变量名称,如能找到,则填充,否则跳过
    
- 模板-标签
    - for标签: {%for..in..%}
    - 用法: 
            {% for..in..%}
                循环语句
            {% endfor %}    
            
    - if标签: 
    - 用法:
            {% if 条件 %}
                条件成立执行语句
            {% elif 条件 %}
                条件成立执行语句
            {% else %}
                以上条件都不成立执行语句
            {% endif %}  
            
    - csrf标签:
    - csrf(跨站请求伪造)
        - 在提交表单的时候,表单页面需要加上{% csrf_token %}
        
        
## session(为了应对HTTP协议的无状态性)
   - 用来保存用户比较敏感的信息
   - 属于request的一个属性
   - 常用操作:
        - request.session.get(key, defaultValue)              
        - request.session.clear(): 清除全部
        - request.session[key] = value: 赋值
        - request.session.flush(): 删除当前会话并且清除会话的cookie
        - del request.session[key]: 也是删除
        
        
## 分页
- django提供现成的分页器来对结果进行分页
- from django.core.paginator import Paginator

## 基于类的视图
- 可以针对HTTP协议不同的方法创建不同的函数
- 可以使用Mixin等oop技术
- Mixin
    - 把来自父类的行为或者属性组合在一起
    - 解决多重继承问题
- ListView



## admin
- 创建Admin
    - settings.py中填入app
    - 打开urls.py
    - 创建超级用户python manage.py createsuperuser
    - 配置settings文件
- 绑定管理模型
    - 在admin.py中from jokeiApp.models import ClassRoom, Student, Teacher
    - 然后进行绑定admin.site.register(Student)
- 设置admin管理类
    - 实现方法
        - AdminInfo
        - 装饰器
    - 修改页面显示数量: list_per_page
    - 操作选项: actions_on_top/button
    - 控制列表中显示的内容: list_display=[]
    - 将方法作为列显示
        - 函数必须返回值
        - 设置short_descraption作为显示内容
        - 排序使用admin_order_field
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档