$Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 用pychanrm创建--->files-->newproject--->选择虚拟环境
2 settings-->project创建
3 用命令行创建,详见https://www.cnblogs.com/liuqingzheng/p/9508851.html
2 django 2.0和django 1.0 路由层区别(*****url,re_path分组分出来的数据,是字符串)
-re_path:跟1.0的url用法相同
-path:传的路径,是准确路径
5个转换器-->path('test/<path:year>', views.re_test),视图函数记得传参year
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)
-自定义转换器
1 定义:一个类:
class MyCon:
# 写一个正则表达式
regex = '[0-9]{4}'
# 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收
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'),
2.1补充:
# 为假,不会加反斜杠
# APPEND_SLASH=False
3 视图层之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)
4 视图层之HttpResponse对象
三件套:render,HttpResponse,redirect
render函数:
temp=Template('<h1>{{ user }}</h1>')
con=Context({'user':'lqz'})
ret=temp.render(con)
print(ret)
# return render(request,'index.html')的内部
5 视图层之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)
# 支持列表形式
return JsonResponse(ll,safe=False)
6 CBV和FBV
-基于类的视图
-1 路由层:url(r'^test/', views.Test.as_view()),
-2 视图层
-导入:from django.views import View
-写一个类:
class Test(View):
def get(self, request):#一定要传request对象
return HttpResponse('get-test')
return HttpResponse('post-test')
-基于函数的视图
7 简单文件上传
前端:
<form action="" method="post" enctype="multipart/form-data">
{#<form action="" method="post" enctype="application/x-www-form-urlencoded">#} 这两种一个是默认 一个是上传文件 都可以获取POST内的数据
<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')
补充:*****编码方式multipart/form-data或者:application/x-www-form-urlencoded传的数据,都可以从POST中取出来
随机推荐
- 2016vijos 1-2 股神小L(堆)
维护前i天的最优解,那么在后面可能会对前面几天的买卖情况进行调整 如果前面买入,买入的这个在后面一定不会卖出 如果前面卖出,卖出的这个可能会在后面变成买入,因为买这个,卖后面的会获得更多的收益 用一个 ...
- mysql创建用户与pymsql模块
mysql 创建用户及增删改查 创建mysql 用户 with grant option 表示用户不存在自主创建 grant [ select ……,insert ……| all ] on 库名.表名 ...
- 字符设备驱动(二)---key的使用:查询方式
---恢复内容开始--- 一.硬件电路 1.1 电路原理图 S1-S5共5个按键,其中,S2-S4为中断按键,S1为复位按键.S1直接为硬件复位电路,并不需要我们写进驱动. 单片机接口如下图: 由图中 ...
- 面向对象 ( OO ) 的程序设计——创建对象
本文地址:http://www.cnblogs.com/veinyin/p/7608000.html 为了避免大量重复代码产生,可采用以下方法创建对象 1 工厂模式 function createP ...
- ue4动画蓝图
动画资源 animation sequence 序列动画 :一帧一骨骼 montage 片断动画 : 动画蒙太奇 将不同的片断组成一个动画 blend space 混合动画 : 将2 ...
- struts2简单入门-参数传递的三种方式
三种方式的简单说明 属性传递 把参数定义为属性提供get/set方法. 使用情况 参数少,不需要共享. 演示代码 public class LoginAction extends ActionSupp ...
- java使用Iterator 迭代器
在springboot中,findall返回的类型为Iterable, Iterator 常用方法: hasnext() next(); Iterable<User> iterable = ...
- Flask网页模板的入门
#网页模板需要导入render_template from flask import Flask,render_template 方法一: #使用render_template模块来渲染模板文件 ...
- 黑马程序员_Java基础视频-深入浅出精华版--视频列表
\day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...
- python scrapy 报错 DEBUG: Ignoring response 403
DEBUG: Ignoring response <403 http://movie.douban.com/top250>: HTTP status code is not handled ...