一、虚拟环境
1 用pychanrm创建--->files-->newproject--->选择虚拟环境
2 settings-->project创建
3 用命令行创建,详见https://www.cnblogs.com/liuqingzheng/p/9508851.html
二、django 2.0和django 1.0 路由层区别
(*****url,re_path分组分出来的数据,是字符串)
-re_path:跟1.0的url用法相同
-path:传的路径,是准确路径
-re_path ---->等于原来的url (re_path模块)
5个转换器-->path('test/<path:year>', views.re_test),
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
-自定义转换器(django2.0)
print('%010d'%12)
# 结果 :0000000012 (共10位,不足的用0补齐)
urls.py
# 1、定义一个类:
# 自定义转换器
class MyCon:
# 写一个正则表达式,名字必须命名为regex
regex='[0-9]{4}'
# 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收
def to_python(self,value):
return int(value) # ×××
# return value # 字符串类型
# 反向解析用的
def to_url(self,value):
return "%04d" %value
# 2 导入模块
from django.urls import register_converter
# 转换器 register_converter
register_converter(MyCon,'yyy')
# 3 写入表达式
urlpatterns = [
path('test/<yyy:year>',views.re_test),
]
views.py
def re_test(request,year):
return HttpResponse('ok')
访问:http://127.0.0.1:8000/test/2018
返回:ok
urls.py
from django.urls import path,re_path,register_converter
from app01 import views
class MyCon:
regex='[0-9]{4}'
def to_python(self,value):
return value
def to_url(self,value):
return "%04d" %value
register_converter(MyCon,'yyy')
urlpatterns = [
path('test/<yyy:year>',views.re_test,name='test'),
]
views.py
from django.shortcuts import render,HttpResponse,reverse
def re_test(request,year):
url=reverse('test',args=(9,))
print(url)
return HttpResponse('ok')
返回:/test/0009
三、APPEND_SLASH
settings.py
# 默认为True ,设置为False 后 http://127.0.0.1:8000/test 不会为test补全后面的'/',打开网页后会成为404(若没有这个页面的话)
APPEND_SLASH=False
四、视图层之http request对像
# request属性
# https://www.cnblogs.com/liuqingzheng/articles/9509801.html
# def test(request):
# print(type(request))
# 前台Post传过来的数据,包装到POST字典中
# request.POST
# 前台浏览器窗口里携带的数据,包装到GET字典中
# request.GET
# 前台请求的方式
# request.method
# post提交的数据,都存放在body体的内容
# request.body
# 取出请求的路径,取不到数据部分
# print(request.path)
# 取出请求的路径,能取到数据部分
# print(request.get_full_path())
# 请求头里的数据(例如:请求地址,名字,以及从哪个地址访问过来的)
# print(request.META)
# referer :是从哪个链接过来的
# post提交数据格式,放到body体中
# name=lqz&age=18&sex=1
# return HttpResponse("ok")
小点补充:调试断点:
五、视图层之HttpResponse
三件套:render,HttpResponse,redirect
HttpResponse 内部原理
views.py
from django.shortcuts import render,HttpResponse
from django.template import Template,Context
def index(request):
if request.method=="GET":
temp = Template('<h2>{{ user }}</h2>')
con = Context({'user': 's_jun'})
ret = temp.render(con)
print(ret)
return HttpResponse(ret)
urls.py
url(r'^index/', views.index)
六、视图层之JsonResponse对象
# 返回给前台的一个json格式,可以让js代码拿到,实现dom操作,这种叫做前后端分离。
# 使用 JsonResponse 返回给前台一个json格式的字典,只支持字典,另外一种方式可以支持列表
views.py
from django.http import JsonResponse
def index(request):
import json
dic={'name':'s_jun','age':20}
# return HttpResponse(json.dumps(dic)) # 原理
return JsonResponse(dic)
支持列表的方式:views.py
def index(request):
li = ['name','age']
return JsonResponse(li,safe=False)
访问:http://127.0.0.1:8000/index/
七、fbv与cbv
-基于类的视图
urls.py
url(r'^test/', views.Test.as_view()), # 自定义Test类,调用as_view的方法,叫做:绑定给类的方法
views.py
from django.views import View
class Test(View):
def get(self,request): # 一定要传request对象
return HttpResponse('This is get-test')
def post(self,request):
return HttpResponse('This is post-test')
-基于函数的视图
八、文件上传
urls.py
url('^upload/', views.upload)
# 需要在根项目下创建一个img的目录
views.py
def upload(request):
if request.method=='GET':
return render(request,'upload.html')
if request.method=="POST":
myfile=request.FILES.get('yyy')
img="img/"+myfile.name
# 打开文件,把上传过来的文件存到本地
with open(img,'wb') as f :
for line in myfile.chunks():
f.write(line)
return HttpResponse('post ok')
upload.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>upload</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="yyy" >
<p> 密码:<input type="password" name="password"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
补充:*****编码方式multipart/form-data或者:application/x-www-form-urlencoded传的数据,都可以从POST中取出来
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。