御命丹心

萧瑟悲声秋风起,刹忆寒蝉未鸣时

导航

django虚拟环境与文件上传

创建可以循环使用的虚拟环境

###### 1安装virtualenv

- pip install virtualenv  

###### 2 .使用--no-site-packages

- virtualenv --no-site-packages djangoenv
- 进入虚拟环境激活虚拟环境 命令:source activate

###### 3检查pip已经安装过哪些包

- pip freeze:查看pip安装过的包
- pip list:查看所有安装过的包

###### 4.安装需要用的库

- pip install django==1.11
- pip install pymysql

###### 5.创建项目并且运行

1. 创建项目

   django-amdin startproject day1   

2. 创建app

   python manage.py startapp app

3. 启动服务器

   python manage.py runserver

###### 6.配置MySQL

- 进入项目下的init文件中

  **import pymysql**

  **pymysql.install_as_MySQLdb()**

###### 7.配置setting和其他文件

-------------------

##### URL反向解析

1. **在url文件中配置namespace**. **在应用下面的url文件中配置name**

   **src = '/app/left/'**

   **src = "{% url 'namespace:name' %}"**

-----

###### 静态解析
**针对静态url加载css/js等等**

需要在setting文件中配置

```
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),]
```

```
<img src='/statc/img/xxx.css'>

加载静态内容
{% load static %}

<img src='{% static "img/xxx.css" %}'>
```

---

###### 网页过滤器[  |  ]
**常见的有**

```
lower
upper    
date:y-m-d h:m:s  时间格式化显示
add:1      
add:-1
```

##### QueryDict对象

- 定义在django.http.QueryDict
- request对象的属性GET、POST都是QueryDict类型的对象
- 与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
- 方法get():根据键获取值
  - 只能获取键的一个值
  - 如果一个键同时拥有多个值,获取最后一个值

```
dict.get('',default)
或简写为
dict['']
```

- 方法getlist():根据键获取值
  - 将键的值以列表返回,可以获取一个键的多个值

```
dict.getlist('',default)
```

###### 获取数据的时候get和filter的区别

​    get          一定要确定能获取到唯一一个对象

​    filter      能获取很多对象,获取的数据是一个queryset

​    filter可以做下面的操作:

​        first():获取第一个
        [:1]
        last():获取最后一个

---

##### django中的分页

- Django的提供了一些类实现管理数据分页,这些类位于Django的/核心/ paginator.py中

        **需要导入Paginator**

```
from django.core.paginator import Paginator
```

###### Paginator对象

- Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数

###### 属性

- count:对象总数
- num_pages:页面总数
- page_range:页码列表,从1开始,例如[1, 2, 3, 4]

###### 方法

- page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常

###### 异常exception

- InvalidPage:当向page()传入一个无效的页码时抛出
- PageNotAnInteger:当向page()传入一个不是整数的值时抛出
- EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出

###### Page对象

###### 创建对象

- Paginator对象的page()方法返回Page对象,不需要手动构造

###### 属性

- object_list:当前页上所有对象的列表
- number:当前页的序号,从1开始
- paginator:当前page对象相关的Paginator对象

###### 方法

- has_next():如果有下一页返回True
- has_previous():如果有上一页返回True
- has_other_pages():如果有上一页或下一页返回True
- next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
- previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
- len():返回当前页面对象的个数
- 迭代页面对象:访问当前页面中的每个对象

###### 示例

###### 创建视图pagTest

```
from django.core.paginator import Paginator

def pagTest(request, pIndex):
    list1 = AreaInfo.objects.filter(aParent__isnull=True)
    p = Paginator(list1, 10)
    if pIndex == '':
        pIndex = '1'
    pIndex = int(pIndex)
    list2 = p.page(pIndex)
    plist = p.page_range
    return render(request, 'booktest/pagTest.html', {'list': list2, 'plist': plist, 'pIndex': pIndex})
```

###### 配置url

```
url(r'^pag(?P<pIndex>[0-9]*)/$', views.pagTest, name='pagTest'),
```

###### 定义模板pagTest.html

```
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<ul>
{%for area in list%}
<li>{{area.id}}--{{area.atitle}}</li>
{%endfor%}
</ul>

{%for pindex in plist%}
{%if pIndex == pindex%}
{{pindex}}&nbsp;&nbsp;
{%else%}
<a href="/pag{{pindex}}/">{{pindex}}</a>&nbsp;&nbsp;
{%endif%}
{%endfor%}
</body>
</html>
```





###### 上传文件

**首先django中需要安装:pip install Pillow**

修改form表单提交的属性为enctype="multipart/form-data"

```
<form action="" method="post" enctype="multipart/form-data">
</form>
```

提交的时候使用request.FILES.get()去获取数据

```
s_img = request.FILES.get('s_img')
#或者
s_img = request.FILES['s_img]
```

设置setting加载media路径

```
#media路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
```

在url中加载路径

```
#把media做成静态目录
urlpatterns += static(MEDIA_URL,document_root = MEDIA_ROOT)
```

页面显示的路径

```
<td><img src="/media/{{ page.s_img }}" width='50' height="50"></td>
```

 

posted on 2020-07-10 17:57  正法  阅读(126)  评论(0编辑  收藏  举报