一.虚拟环境安装
目的:为了解决版本共存问题
''' 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: 数据大汇总的字典 '''
六.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('上传成功')