Django
目录结构:
app名字的文件夹:
-migrations- ---》放数据库迁移的数据
-admin.py ---》后台管理
-apps.py-----》app配置相关
-models ---》orm相关(数据库)
-test ---》测试相关
-views ---》视图函数
项目名字的文件夹
-settings---》项目全局配置文件
-urls---》路由和视图函数的映射关系
-wsgi---》socket服务相关
templates
-所有模板文件(html页面)
mange.py
-执行所有命令的入口
视图函数:
视图函数必须有个request对象,里面包含浏览器发的所有数据。
路由层:
-路由的作用:地址跟视图函数的对应关系
-简单的路由配置:
urls(arg1,arg2):
第一个参数为正则表达式,例如:url(r'^index', views.index),
只要是url里是index开头的就匹配这个视图函数。
第二个参数为要执行的视图函数
-无名分组:
用位置参数来传递
url(r'^index/([0-9]{4})/$', views.index)
使用正则表达式的分组把匹配到的内容自动回调后面的视图函数处理
分组出几个数据视图函数就添加几个参数来接收
def index(request,year):
return HttpResponse(year)
输入http://127.0.0.1:8000/index/1111
得到1111
-有名分组:
分组出几个数据用关键字参数来传递到视图函数
url(r'^index/(?P<year>[0-9]{4})/(?P<mon>[0-9]{4})$', views.index)(正则 之前没见过)
def index(request,year,mon):
return HttpResponse(mon + year)
输入http://127.0.0.1:8000/index/1111/1258
得到12581111
-路由的分发:
如果创建了新的app,那么在settings里把app的名字添加到INSTALLED_APPS中
-1 在不同app中创建urls.py子路由
-2 总路由导入 from django.conf.urls import include
urlpatterns = [
url(r"app01/",include("app01.urls")),
url(r"app02/",include("app02.urls"))
]总路由的分发
-3 from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r"^index",views.index),
]#子路由的分发
—reder:
返回模板网页
在视图函数中返回return render(request,模板网页路径)
模板网页在templates文件夹中,也可以在settings中自行设置
—redirect: 重定向
return redirect("跳转的地址")
重定向就是发两次请求
第一次发请求接收到重定向的地址 代码3xx
第二次发之前接收到的重定向的地址请求 代码200
-反向解析:
为了解决页面url地址改变导致其他网页无法找到此网页,动态生成。
url(r"^index1111",views.index,name="index")
给此url命名
-在视图函数里用
from django.shortcuts import reverse
url = reverse("index")拿到“index”对应的url
其他网页通过“index"找到网页
-模板网页里用
在模板网页中可以这样写"{% url 'index' %}"
动态生成链接
-名称空间:(不同app中的路由名字重复,不推荐这样用,最好不同名)
-总路由做分发的时候,可以指定名称空间
urlpatterns = [
url(r"app01/",include("app01.urls",namespace="app01")),
url(r"app02/",include("app02.urls", namespace="app02"))
]
-反向解析:
相应的在视图函数中:url = reverse("app01:index")
url = reverse("app02:index")
模板层中:
{% url 'app01:index' %}
{% url 'app02:index' %}
防止反向解析时 同名导致的导入错误
视图层:
1 请求对象 request:
属性
请求方式
request.method
请求体中的内容(当成字典)
request.GET get请求的内容
request.POST post请求的内容 表单
request.FILES 上传的文件
request.path 请求的路径 不带数据
request.bady 请求体原生数据
request.body
request.get_full_path()请求的全路径 带数据
2 请求对象的文件上传
这种格式才能提交文件 html里
enctype="multipart/form-data"
3 jsonresponse
from django.http import Jsonresponse
默认支持字典
为了让Jsonresponse支持列表则在Jsonresponse里的safe=False
4 CBV和FBV(基于类的的视图和基于函数的视图)
CBV写法:
视图函数中:
from django.views import View
class Test(View):
def get(self, request):
return HttpResponse("cbv--get")
def post(self, request):
return HttpResponse("cbv--post")
路由:
url(r"^Test",views.Test.as_view()),