0. 基于django环境右键运行测试文件
import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings")
import django
django.setup()
后就可以右键运行这个单个py程序
1. 虚拟环境
-
用Pycharm创建: ----> files-->newproject--->选择虚拟环境
-
settings-->project创建
-
用命令行创建
0. 安装 pip3 install virtualenv 1. cmd中cd到想安装的路径 2. 创建虚拟环境 virtualenv env_django(创建纯净环境,env_django为名字) virtualenv --system-site-packages env_django(创建环境,继承原安装的模块) 3. 激活该虚拟环境: -windows进到目录里,的Script文件夹输入:activate -linux:soruse env1/Script/activate 4.退出虚拟环境: deactivate 5. 在pycharm中使用虚拟环境 files--settings--Project--Project Interpreter--add选择虚拟环境路径下的python.exe即可
2. django 2.0和django 1.0 路由层区别
-
re_path:跟1.0的url用法相同
需要导入:
from django.urls import path, re_path
-
path:传的路径,是准确路径
path('test/', views.re_test,),
path传的第一个参数,不是正则,准确的路径,不支持正则
-
五种转换器
path('test/<path:year>', views.re_test),
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式 int,匹配正整数,包含0。 slug,匹配字母、数字以及横杠、下划线组成的字符串。 uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。 path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
-
自定义转换器
定义类 ,类名随意 ,但必须要有
regex
属性与to_python
和to_url
方法注册
register_converter(MyCon,'yyy')
第一个参数为刚定义的类名 , 第二个参数是转换器的名字
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 注册这个转换器 , 取名yyy: from django.urls import register_converter register_converter(MyCon,'yyy') 3 使用yyy这个转换器 path('test/<yyy:year>', views.re_test,name='test')
-
2.1 浏览器自动添加 /
问题
在settings.py文件里设置APPEND_SLASH
,为真自动添加,为假不添加
3. 视图层之request对象
request.POST
前台Post传过来的数据,包装到POST字典中
request.GET
前台浏览器窗口里携带的数据,包装到GET字典中
request.method
前台请求的方式
request.body
post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1
request.path
取出请求的路径,取不到数据部分
request.get_full_path()
request.META
取出请求的路径,能取到数据部分
4. 视图层之HttpResponse对象
三件套:render,HttpResponse,redirect
-
render: 返回html页面及数据
return render(request,'index.html',{'user':'lqz'})
-
HttpResponse: 返回字符串
return HttpResponse('<h1>Hello World</h1>')
-
redirect: 重定向
return redirect('https:www.baidu.com')
5. 视图层之JsonResponse对象
-
导入:from django.http import JsonResponse
-
视图函数中:
def test(request): import json dic={'name':'lqz','age':18} ll = ['name', 'age'] 使用原来的json 把字典转换成json格式,返回到前台 return HttpResponse(json.dumps(dic)) 把列表转换成json格式,返回到前台 return HttpResponse(json.dumps(ll)) 使用JsonResponse 把字典转换成json格式,返回到前台 return JsonResponse(dic) 报错,默认不支持列表形式 return JsonResponse(ll) 支持列表形式 return JsonResponse(ll,safe=False)
6. CBV和FBV (class base view) (function base view)
-
CBV(class base view) 基于类的视图
1.视图层 导入:from django.views import View 写一个类:如果是get请求响应get函数 , 如果是post请求响应post函数 class Test(View): def dispatch(self, request, *args, **kwargs): print(request) print(args) print(kwargs) # 可以写类似装饰器的东西,在前后加代码 obj=super().dispatch(request, *args, **kwargs) return obj def get(self, request):#一定要传request对象 return HttpResponse('get-test') def post(self, request): return HttpResponse('post-test') 2. 路由层:url(r'^test/', views.Test.as_view()),
-
FBV(function base view) 基于函数的视图
7. 右键运行测试文件
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "exam.settings")
import django
django.setup()