一,虚拟环境的搭建
1,用pycharm在创建的时候--->files-->newproject--->选择虚拟环境
2,在settings---->project创建新的虚拟环境
3,用命令行中,1>安装:pip3 install virtualenv
2>创建虚拟环境:
-(1)virtualenv env_django(创建虚拟环境)
-(2)virtualenv env_django(创建纯净环境)
-(2)virtualenv --system-site-packages env_django(创建环境,继承原安装的模块)
激活该虚拟环境:3>windows进入到目录里,Script文件夹输入:activate
-linux:soruse env1/Script/activate
退出虚拟环境:
-deactivate
在pycharm中使用虚拟环境
-files--settings--Project--Project Interpreter--add选择虚拟环境路径下的python.exe即可
二,django2.0和django1.0的区别
路由层区别(url,re_path分组分出来的数据,是字符串)
-re_path:和1.0的url用法相同
-path:传的是路径,是准确的路径
里面存在5个转换器,------>path('test/<path:year>', views.re_test),
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)自定义转换器:
1,先定义一个类:
class MyCon: # 写一个正则表达式 regex = '[0,9]{4}' # 匹配出来的数据会被传到这里,return 回去,会被视图函数接收 def to_python(self, value): return int(value) # 反向解析用下面的这种函数 def to_url(self, value): return '%04d' %value
下面的操作是在路由层:
2,from django.urls import register_converter
register_converter(MyCon.'yyy')
3,path('test/<yyy:year>', views.re_test,name='test')
注意:APPEND_SLASH=False (为假时,不会自己加反斜杠,一般不会设置,默认是真)
三,视图层之HttpRequest对象
# 前台Post传过来的数据,包装到POST字典中 # request.POST # 前台浏览器窗口里携带的数据,包装到GET字典中 # request.GET # 前台请求的方式 # request.method # post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1 # request.body # 取出请求的路径,取不到数据部分 # print(request.path) # 取出请求的路径,能取到数据部分 # print(request.get_full_path()) # print(request.META)
四,视图层之,三件套
三件套:render,HttpResponse,redirect
render函数: temp=Template('<h1>{{ user }}</h1>') con=Context({'user':'lqz'}) ret=temp.render(con) print(ret) # return render(request,'index.html') return HttpResponse(ret)
需要用json格式把数据传输到页面,一般导入json模块,在django框架中,可以这样导入
import json dic={'name':'六'} ret=json.dumps(dic,ensure_ascii=False) print(ret) from django.http import JsonResponse def test(request): dic = {'name': '六'} # 如果json格式中的字典出现二进制的格式,则需要在括号里面把阿斯克码改成Flase return JsonResponse(dic,json_dumps_params={'ensure_ascii':False})
五,视图层之JsonResponse对象
-导入:from django.http import JsonResponse -视图函数中: def test(request): import json # dic={'name':'lqz','age':18} ll = ['name', 'age'] # 把字典转换成json格式,返回到前台 return HttpResponse(json.dumps(dic)) # 把列表转换成json格式,返回到前台 return HttpResponse(json.dumps(ll)) # 把字典转换成json格式,返回到前台 return JsonResponse(dic) # 报错,默认不支持列表形式 return JsonResponse(ll) # 支持列表形式(后面需要添加save=False) return JsonResponse(ll,safe=False)
六,CBV和FBV
1,基于类的视图
在路由层需要更改的: url(r'^test/', views.Test.as_view()) 视图层导入 from django.views import View class Test(View): def get(self,request): return HttpResponse('get-test') def post(self, request): return HttpResponse('post-test')
2,基于函数的视图
七,简单的文件上传
前端:
<form action="" method="post" enctype="multipart/form-data"> {#<form action="" method="post" enctype="application/x-www-form-urlencoded">#} <input type="file" name="myfile"> <input type="text" name="password"> <input type="submit" value="提交"> </form>
后台
def fileupload(request): if request.method=='GET': return render(request,'fileupload.html') if request.method=='POST': # FILES print(request.FILES) print(type(request.FILES.get('myfile'))) # 从字典里根据名字,把文件取出来 myfile=request.FILES.get('myfile') from django.core.files.uploadedfile import InMemoryUploadedFile # 文件名字 name=myfile.name # 打开文件,把上传过来的文件存到本地 with open(name,'wb') as f: # for line in myfile.chunks(): for line in myfile: f.write(line) return HttpResponse('ok')