zoukankan      html  css  js  c++  java
  • Django视图层、虚拟环境

    一.虚拟环境安装

    目的:为了解决版本共存问题

    '''
    1.通过pip3安装虚拟环境:
        -- pip3 install virtualenv
    2.前往目标文件夹:
        -- cd 目标文件夹  (C:Virtualenv)
    3.创建纯净虚拟环境:
        -- virtualenv 虚拟环境名 (py3-env1)
    了解:创建非纯净环境:
        -- virtualenv-clone 本地环境 虚拟环境名
    4.终端启动虚拟环境:
        -- cd py3-env1Scripts
        -- activate
    5.进入虚拟环境下的python开发环境
        -- python3
    6.关闭虚拟环境:
        -- deactivate
    '''

    pycharm环境下,安装虚拟环境:

    1.用pycharm选择virtualenv创建一个纯净环境(创建python项目);

    2.将环境拷贝到需要指定长期使用的文件夹下;

    3.再次创建Django项目时,将该环境添加到已存在的pycharm环境中进行选择;

    4.为该环境添加需要处理的版本共存包(django 2.1.7版本)

    二.路由配置主页与404

    路由层:
    from django.urls import path, re_path
    from app.views import *
    urlpatterns = [
    
       # 主页最上方配置
        re_path('^$', root, name='root'),   
        re_path('^index/$', index), 
        re_path('^home/$', home), 
    
        #其他路由
        
        # 404配置在最下方
        re_path('/$', error)
    ]
    
    视图层:
    from django.shortcuts import render, redirect, reverse
    # 主页
    def root(request):
        return render(request, 'root.html')
    
    def index(request):
        return redirect(reverse('root'))
    
    def home(request):
        return redirect(reverse('root'))
    
    # 404
    def error(request):
        return render(request, 'error.html')

    三.Django 2.x版本路由分发

    # 注:path匹配的是绝对路径的字符串,不使用正则语法
    
    # 1.无名称空间
    主路由:
    path('app01/', include('app01.urls'))
    子路由:
    path('test/', views.test)
    
    
    # 2.有名称空间
    主路由:
    path('app01/', include(('app01.urls', 'app01'))) # urls的路径和名称空间是一个元组的形式组成的。
    子路由:
    path('test/', views.test, name='test')
    模板层:
    {% url 'app01:test' %}

    四.伪静态

    动态页面:数据内容会发生变化的页面

    静态页面:数据内容不会发生变化的页面

    针对SEO(搜索引擎优化),静态页面更容易被搜索引擎网站收录

    伪静态就是讲动态页面伪装成静态页面,容易被搜索引擎网站收录,从而增加搜索概率,提高流量。

    '''
    路由层:
    url('^index/$', views.index),
    url('^article/(?P<id>(d+)).html/$', views.article, name='article')
    
    视图函数层:
    def index(request):
        return render(request, 'index.html')
    def article(request, id):
        return render(request, 'article.html', {'id': id})
    
    模板层:
    index.html
    <a href="{% url 'article' 1 %}">第一篇文章</a>
    <a href="{% url 'article' 2 %}">第二篇文章</a>
    <a href="{% url 'article' 3 %}">第三篇文章</a>
    
    article.html
    <h1>第{{ id }}篇文章</h1>
    '''

    五.request对象

    '''
    1. method: 请求方式
    2. GET: get请求的参数
    3. POST: post请求的参数(本质是从bdoy中取出来)
    4. body: post提交的数据(不能直接查看)
    5. path: 请求的路径,不带参数
    6. request.get_full_path(): 请求路径,带参数
    7. FILES: 文件数据
    8. encoding: 编码格式
    9. META: 数据大汇总的字典
    '''

    request对象详解

    六.FBV与CBV

    FBV:function base views 函数方式完成视图响应

    CBV:class base views 类方式完成视图响应

    视图层:
    from django.shortcuts import HttpResponse
    from django.views import View
    class CBVView(View):
        def get(self, request):
            return HttpResponse("响应get请求")
        def post(self, request):
            return HttpResponse("响应post请求")
    路由层:
    url('^path/$', views.CBVView.as_views())

    七.文件上传

    前台:

    前端:upload.html页面
    1.往自身路径发送post请求,要将第四个中间件注释
    2.multipart/form-data格式允许发送文件
    3.multiple属性表示可以多文件操作
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="files" multiple="multiple">
        <input type="submit" value="上传">
    </form>

    后台:

    后台:re_path('^upload/$', upload)
    def upload(request):
        if request.method == "GET":  
            return render(request, 'upload.html')
        if request.method == "POST":
            # 如果一个key对应提交了多条数据,get取最后一个数据,getlist取全部数据
            last_file = request.FILES.get('files', None)
            files = request.FILES.getlist('files', None)
            # import django.core.files.uploadedfile.TemporaryUploadedFile
            # file是TemporaryUploadedFile类型,本质是对系统file类封装,就是存放提交的文件数据的文件流对象
            for file in files:  
                with open(file.name, 'wb') as f:
                    for line in file:  # 从file中去数据写到指定文件夹下的指定文件中
                        f.write(line)
            return HttpResponse('上传成功')
  • 相关阅读:
    汉诺塔
    美丽联合2018前端
    游览器
    python多线程实现
    cuda toolkit
    编译器,解释器及混合编译
    大疆无人机
    SaaS PaaS IaaS mes
    CNN中权值共享的理解
    最近动作项目心得
  • 原文地址:https://www.cnblogs.com/wangke0917/p/10451294.html
Copyright © 2011-2022 走看看