Django框架04
虚拟环境
为了解决版本共存问题
- 用pycharm选择virtualenv创建一个纯净环境
- 将环境copy到需要指定长期使用的文件夹下
- 再次创建项目时,将该环境添加到pycharm环境选择中
- 为该环境添加需要处理的版本共存包
第一步:
第二步:等待copy虚拟环境
第三步:出现虚拟环境就安装成功了
也可以通过命令行的方式创建虚拟环境:
''' 1.通过pip3安装虚拟环境: -- pip3 install virtualenv 2.前往目标文件夹: -- cd 目标文件夹 (C:\Virtualenv) 3.创建纯净虚拟环境: -- virtualenv 虚拟环境名 (py3-env1) 了解:创建非纯净环境: -- virtualenv-clone 本地环境 虚拟环境名 4.终端启动虚拟环境: -- cd py3-env1\Scripts -- activate 5.进入虚拟环境下的python开发环境 -- python3 6.关闭虚拟环境: -- deactivate 7.PyCharm的开发配置 添加:创建项目 -> Project Interpreter -> Existing interpreter -> Virtualenv Environment | System Interpreter -> 目标路径下的python.exe 删除:Setting -> Project -> Project Interpreter -> Show All '''
Django的版本区别
django1.x与2.x、3.x有些许区别。
路由层配置:
url(),支持正则;path()的第一个参数不支持正则;
如果想使用正则,也提供了方法>>>:from django.urls import path,re_path
path方法提供了转换器功能:
path('index/<int:id>/', index)
匹配对应位置的数据并且自动转换类型。
视图函数的返回值
视图函数必须返回一个HttpResonse对象。
HttpResponse class HttpResponse(...): pass render def render(...): return HttpResponse(...) redirect def redirect(...):
user_dict = {'name': 'jason', 'pwd': 123, 'hobby': '好好学习'} return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False}) class JsonResponse(HttpResponse): def __init__(self, data,json_dumps_params=None, **kwargs): data = json.dumps(data, **json_dumps_params)
前端: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('上传成功')
''' 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:Function base views 函数方式完成视图响应。
CBV:Class base views 类方式完成视图响应。
from django import views class MyLoginView(views.View): def get(self, request): return HttpResponse("from CBV get view") def post(self, request): return HttpResponse("from CBV post view") url(r'^ab_cbv/', views.MyLoginView.as_view())
''' as_view可能是普通的静态方法 as_view可能是绑定给类的方法 '''
对象查找属性的顺序。
先从对象自身开始、再从产生对象的类、之后是各个父类。
''' MyLoginView.as_view() 先从我们自己写的MyLoginView中查找 没有再去父类Views中查找 '''
函数名加括号执行优先级最高。
''' url(r'^ab_cbv/', views.MyLoginView.as_view()) 项目已启动就会执行as_view方法 查看源码返回了一个闭包函数名view def as_view(cls): def view(cls): pass return view url(r'^ab_cbv/', views.view) # CBV与FBV在路由匹配本质是一样的!!! '''
路由匹配成功之后执行view函数。
''' def view(): self = cls() return self.dispatch(request, *args, **kwargs) '''
执行dispatch方法。
''' 需要注意查找的顺序!!! def dispatch(): handler = getattr(self, request.method.lower()) return handler(request, *args, **kwargs) '''
""" django提供的模板语法只有两个符号 {{}}:主要用于变量相关操作(引用) {%%}:主要用于逻辑相关操作(循环、判断) """
1.传值的两种方式 # 传值方式1:指名道姓的传 适用于数据量较少的情况 节省资源 # return render(request, 'ab_temp.html', {'name':name}) # 传值方式2:打包传值 适用于数据量较多的情况(偷懒) 浪费资源 '''locals() 将当前名称空间中所有的名字全部传递给html页面''' return render(request, 'ab_temp.html', locals())
''' 2.传值的范围 基本数据类型都可以 函数名 模板语法会自动加括号执行并将函数的返回值展示到页面上 不支持传参(模板语法会自动忽略有参函数) 文件名 直接显示文件IO对象 类名 自动加括号实例化成对象 对象名 直接显示对象的地址 并且具备调用属性和方法的能力 '''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?