Django框架项目目录结构

setting.py django的全局配置
url 全局路由表 djano中 一个view对应一个路由
wsgi 对于一个runserver服务器的配置
dbsql3 默认文档数据库
managae.py 默认管理
migrations 存放db迁移文件

  • app下
    admin 往往存放配置信息
    models 存放数据库模型
    tests 测试代码
    view web应用视图

  • 改中文,修改默认时区

根路径下的setting.py中进行修改

  1. `LANGUAGE_CODE = 'zh-hans' `
  2. `TIME_ZONE = 'Asia/Shanghai'`
  • django是可以热更新的

django项目中模块是应用,模块之间,应用之间是可以相互隔开的。

子应用

作用

有一些业务功能模块需要做到复用。
将工程项目拆分为不同的子功能模块,
在django中以子应用的形式存在

各功能模块间可以保持相对的独立,
可以将模块代码整体复制过去

创建

终端进入manage.py所在目录执行命令
python manage.py startapp 子应用名

使用django工具简化命令执行

菜单栏中
pytharm-tools-run manage.py task
快捷键为
ctrl + alt +r
之后可以直接省去 pythn manage.py直接在工具内执行命令,
ex
创建子应用
startapp 子应用名即可

注册

在全局配置文件setting.py中的 INSTALLED_APP字段下配置

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. # 注册创建的app
  9. 'projects.apps.ProjectsConfig',
  10. 'interfaces.apps.InterfaceConfig'
  11. ]

创建视图

在projects(示例中创建的app)/views.py中编写视图代码

  1. # 函数式视图方法编写,有缺陷,当视图量很多的时候非常不方便管理 易混乱
  2. def index(request):
  3. '''
  4. index 视图
  5. :param request: 前端发送来的请求信息会放在request中
  6. :httprequest对象,包含前端用户的所有请求信息
  7. :return: 必须返回一个httpresponse对象或者子对象
  8. '''
  9. if request.method == "GET":
  10. return HttpResponse("Get请求 hello addicated")
  11. elif request.method == "POST":
  12. return HttpResponse("POST 请求来啦")
  13. else:
  14. return HttpResponse("是其他请求")
  15. # 类视图
  16. class IndexView(View):
  17. '''
  18. index 主页类视图
  19. '''
  20. def get(self, request):
  21. # get请求
  22. # 渲染到模板页面上,这种是前后端不分离的模式
  23. # return render(request,"demo.html")
  24. # request.GET 可以取到前端传来的查询关键字参数
  25. # reuqest.GET 返回的事一个字典类对象,支持字典的所有操作
  26. return HttpResponse("Get请求 hello addicated")
  27. def post(self, request):
  28. # 使用request.POST 获取www-form 表单中的内容,同样为DICT
  29. # 如果要获取到json格式的请求数据的话,reqeust.body
  30. # json格式的数据存放在body中,但是需要先转换为字符串
  31. # json.dumps() 转换成json
  32. # json.loads() 转换成dict
  33. # 前端传来字节类型的文件需要先转换为字符串,
  34. # 然后进行字典类型转换
  35. #
  36. # str = request.body.decode('utf-8') # bytes转换为字符串
  37. # dict = json.loads(str) # json格式的字符串转换为字典
  38. return HttpResponse("POST 请求来啦")
  39. def delete(self, request):
  40. return HttpResponse("delete 请求来啦")
  41. def put(self, request):
  42. return HttpResponse("put 请求来啦")

路由注册

在根路径下的url中进行路由注册

  1. from django.contrib import admin
  2. from django.urls import path
  3. # from projects.views import index
  4. from django.urls import include
  5. # 全局路由配置
  6. # 1, urlpatterns 为固定名称的列表
  7. # 2, 列表中的一个元素,就代表一条路由 按照顺序去发现
  8. # 3,从上到下进行匹配,如果能匹配上,django会导入和调用path函数第二个参数指定的视图
  9. # 4,匹配不上会自动抛出一个404页面错误 默认为404页面
  10. urlpatterns = [
  11. path('admin/', admin.site.urls),
  12. # 添加编写好的视图在这里
  13. # path('index/', index()),
  14. # include 去子应用的路由模块中寻找
  15. # web上来一个请求访问 index路由,现在全局路由中匹配
  16. # 发现为include ,就会在去子应用的路由中去匹配
  17. path('index/',include('projects.urls'))
  18. ]
  19. # app下的子路由,写了include之后会从app目录下去匹配url
  20. from . import views
  21. # 应用下方的子路由
  22. # 1.每一个应用(模块)都会维护一个子路由,当前应用的路由信息
  23. # 2. 跟主路由一样,也是从上到下进行匹配
  24. # 3. 可以匹配上,则执行path第二个参数指定的视图,匹配不上则报404异常
  25. urlpatterns = [
  26. # path('',index)
  27. # 类视图的注册 类视图后.as_view() 方法
  28. # 如果为类视图,path第二个参数一定为as_view()方法的调用
  29. path("",views.IndexView.as_view()),
  30. # 针对路径传参来进行 int 路径参数类型转换器,只有数字才会被匹配到
  31. # :坐标为转换器,右边为参数别名 视图函数类就可以直接在方法上的第三个参数写
  32. # def get(self,request,pk): pk就会自动适配前面传来的值
  33. # int ,slug 参数的一种类型,uuid
  34. path("<int:pk>/",views.IndexView.as_view())

正则路由匹配

需要使用到re_path模块,本篇暂不记载。可看原码进行学习

流程

创建应用-注册应用-编写视图-注册视图路由-启动查看编写情况

MVT和MVC

M 模型 同 MVC中的M 负责数据库交互,进行数据处理
V 视图 同 MVC中的C 负责接收请求,进行业务处理,返回响应
T 模板 同 MVC中的V 负责构造要返回的html页面

前后端分离 or 不分离

不分离

后端要控制数据的显示
前后端不分离,业务逻辑代码与视图代码耦合严重
返回的是html页面,适应性拓展性很差,举例,如果需要部署在app上呢,html能很好的适应嘛
复用性极差,
前后端开发工作分工不明确

分离

返回的事json格式的数据
当前程序架构主流
后端只对数据进行处理,只提供数据
前端开发效率,页面没关,全由前端负责,前后端完全独立
解耦合
前后端同时开发,缩小业务上线周期
绝大多数情况下,后端发送json格式的参数