## 内容回顾

#### 1.所有的命令

##### 下载安装

​ pip install django==1.11.20 - i 源

##### 创建项目

​ django-admin startproject 项目名

##### 启动项目

​ python manage.py runserver # 127.0.0.1:8000

​ python manage.py runserver 80 # 127.0.0.1:80

​ python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80

##### 创建APP

​ Python manage.py startapp APP名称

##### 数据库迁移

python manage.py makemigrations # 根据models变化生成迁移文件

python manage.py migrate # 将变更记录同步到数据库

#### 2.配置

1. 静态文件

STAITC_URL = '/static/'

STATICFILES_DIRS = [

​ os.path.join(BASE_DIR,'static'),

]

2. INSTALLED_APPS = [

​ 'app01' 或者 ‘app01.apps.App01Config’

]

3. 中间件

注释掉CSRF有关

4. DATABASES

ENGINE: mysql

NAME: 名字

HOST:IP

PORT: 端口

USER: 用户名

PASSWORD: 密码

5. TEMPLATES

DIRS :[ os.path.join(BASE_DIR ,'templates') ]

#### 3.django使用mysql数据库的流程:

1. 创建一个mysql数据库

2. 数据库的配置:

ENGINE: mysql

NAME: 名字

HOST:IP

PORT: 端口

USER: 用户名

PASSWORD: 密码

3. 告诉django使用pymysql连接mysql数据库

在与settings同级目录下的init。py写:

​ import pymysql

​ pymysql.install_as_MySQLdb()

4. 在app下的models中写类(表):

```python
from django.db import models


class Publisher(models.Model): # app01_publisher
pid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32) # varchar(32)


class Book(models.Model):
name = models.CharField(max_length=32)
pub = models.ForeignKey('Publisher', on_delete=models.CASCADE)


class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField('Book')
```

5. 执行数据库迁移的命令

python manage.py makemigrations # 根据models变化生成迁移文件

python manage.py migrate # 将变更记录同步到数据库

#### 4. request

request.method ——》 GET POST

request.GET ——》 url地址上的参数

request.POST ——》POST请求提交的数据

#### 5. response

HttpResponse("字符串") ——》 页面显示字符串

render(reqeust,'模板的文件名', { k1:v1 }) ——》 一个完整的页面#返回值key必须是字符串

redirect('要跳转的地址') ——》 重定向 Location: 要跳转的地址

#### 6.ORM

```python
from app01 import models

# 查
models.Publisher.objects.all() # 获取所有的数据 queryset 对象列表
models.Publisher.objects.filter(条件) # 获取所有满足条件的对象 queryset 对象列表
models.Publisher.objects.get(条件) # 获取一个满足条件的对象 对象 无或者多个就报错
models.Publisher.objects.all().order_by('pk') # 排序 升序

pub_obj.pid pub_obj.pk # 主键
pub_obj.name # 名字

book_obj.pk
book_obj.name
book_obj.pub ——》 书籍所关联的出版社的对象
book_obj.pub_id ——》 书籍所关联的出版社的对象pk

author_obj.books ——》 关系管理对象
author_obj.books.all() ——》 作者所关联的书籍对象
author_obj.books.set([ 所关联对象的id, 所关联对象的id,所关联对象的id ])
author_obj.books.set([ 所关联对象, 所关联对象,所关联对象 ])

# 增加
models.Publisher.objects.create(name='xxxx')
# 外键
models.Book.objects.create(name='xxxx',pub=pub_obj)
models.Book.objects.create(name='xxxx',pub_id=pub_obj.pk)
# 多对多
author_obj = models.Author.objects.create(name='xxxx')
author_obj.books.set([ id,id ])

obj = models.Publisher(name='xxxx')
obj.save()

# 删除
models.Publisher.objects.filter(pk=pk).delete()
models.Publisher.objects.get(pk=pk).delete()

# 修改
pub_obj.name ='new name'
pub_obj.save()

book_obj.name = 'new name'
book_obj.pub_id = pub_obj.id
book_obj.pub = pub_obj
book_obj.save()

author_obj.name = 'new name'
author_obj.save()
author_obj.books.set([id ,id])

```

#### 7.模板

{{ 变量 }}
正向查找
{{对象.找到自己和别人建的多对多的属性.all}}
反向查找
{{对象.找到别人和自己建的多对多的属性_set.all}}
```html

{% for i in list %}
{{ forloop.counter }}
{{ i }}

{% endfor %}

{% if 条件 %}
xxx
{% elif 条件 %}
xxxx
{% else %}
xx
{% endif %}
```

## 今日内容

#### 1. MVC MTV

MVC

- M models
- V view HTML
- C controller 控制器

MTV

- M models
- T template HTML
- V view 函数 业务逻辑

#### 2. 过滤器

​ 语法

​ {{ value|filter_name }} {{ value|filter_name:参数 }}

**default**  

```
{{ value|default:"nothing"}}
```

**add**

数字加减

字符串的拼接

列表的拼接

```
{{ value|add:"2" }}
```

**length**

取变量的长度

**slice**  

切片

**truncatechars**

截断字符

**date**

```
{{ value|date:"Y-m-d H:i:s"}}
```

```
# settings 中配置
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d H:i:s'
```

**safe**

Django这段代码是安全的不必转义

https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#built-in-filter-reference

自定义filter

1. 在app下创建一个名为templatetags的Python包 # templatetags不能变

2. 在包内创建py文件 —— my_tags.py

3. 在py文件中下:

```python
from django import template

register = template.Library() # register 不能变
```

4. 写函数+装饰器

```python
@register.filter
def add_str(value, arg=None): # 函数名 就是 过滤器的名字 value变量 arg 给变量添加额外的参数
ret = '{}__{} '.format(value, arg)
print(ret)
return ret
```

5.使用自定义装饰器:

```

{% load my_tags %} # 导入文件

{{ 'alex'|add_str:'sb' }}


```

6.如何让用装饰器实现html语言

```HTML
使用
{{ 'https://www.baidu.com'|show_a:'百度'|safe }}

```

还可以引入
from django.utils.safestring import mark_safe
return mark_safe(obj)
就可以了

django学习总结1的更多相关文章

  1. 今天主要推荐一下django学习的网址!

    前言:每个月忙碌的头20天后,在上班时间投入到django理论学习的过程中,花了差不多3天时间简单的研究了一下django,着实废了我不少脑细胞. 采用虫师前辈的一张图和话: 如果你把这过程梳理清晰了 ...

  2. Django 学习笔记之四 QuerySet常用方法

    QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...

  3. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  4. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  5. Django学习笔记(五)—— 表单

    疯狂的暑假学习之  Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path         ...

  6. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

  7. django学习之Model(二)

    继续(一)的内容: 1-跨文件的Models 在文件头部import进来,然后用ForeignKey关联上: from django.db import models from geography.m ...

  8. Python框架之Django学习

    当前标签: Django   Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0     Python框架之Django学习笔记(十三) 尛 ...

  9. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

  10. Django 学习笔记(五)模板标签

    关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...

随机推荐

  1. 【LeetCode】67. Add Binary 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BigInteger类 模拟加法 日期 题目地址:h ...

  2. 【LeetCode】80. Remove Duplicates from Sorted Array II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. 【LeetCode】890. Find and Replace Pattern 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典+set 单字典 日期 题目地址:https:/ ...

  4. 问题--ImportError: DLL load failed: 找不到指定的模块

    今天在运行别人的项目时出现了问题: ImportError: DLL load failed: 找不到指定的模块. 解决方法: 卸载后重新安装. 详情参考: Python报错:ImportError: ...

  5. Chapter 3 Observational Studies

    目录 概 3.1 3.2 Exchangeability 3.3 Positivity 3.4 Consistency First Second Fine Point 3.1 Identifiabil ...

  6. <学习opencv>图像变换

    拉伸.收缩.扭曲和旋转 统一调整大小 我们经常会遇到一些我们希望转换为其他尺寸的图像. 我们可能想要扩大或缩小图像; 这两项任务都是由同一个功能完成的. cv::resize() 该cv::resiz ...

  7. Android 摄像头预览悬浮窗

    用CameraX打开摄像头预览,显示在界面上.结合悬浮窗的功能.实现一个可拖动悬浮窗,实时预览摄像头的例子. 这个例子放进了单独的模块里.使用时注意gradle里的细微差别. 操作摄像头,打开预览.这 ...

  8. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

  9. 实验 4 :Open vSwitch 实验 —— Mininet 中使用 OVS 命令

    实验 4 :Open vSwitch 实验 -- Mininet 中使用 OVS 命令 一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调 ...

  10. 【基因组学】maker的安装和注释

    本文默认读者有一定的生信基础,没有基础的可以阅读以前的笔记内容. maker作为比较受人认可的基因组注释软件,其流程较为清晰简单. 不知何故,我的conda无法安装maker,故而采用手动安装方式. ...