1. 程式人生 > >django學習總結1

django學習總結1

pro tags port return response mysql連接 django fault 就是

## 內容回顧

#### 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