zoukankan      html  css  js  c++  java
  • 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>
    ```
  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/xiaochuichui/p/13280563.html
Copyright © 2011-2022 走看看