Django Web开发

第19章 Django框架web开发

  1. Django是使用Python编写,基于MVC模式的框架,因为在Django中,控制器接收客户端请求的角色是由框架自行处理的,所以在Django开发中,更关注的是模型、模板、视图的MTV模式:

    • 模型(Model),即数据存取层,用于处理与数据相关的相关事务。

    • 模板(Template),即表现层,用于处理与变现相关的决定,例如如何实现页面显示。

    • 视图(View),即业务逻辑层,是模型与模板之间的桥梁,视图处理用户请求,仅仅决定展现哪些数据给用户。

  2. 搭建Django环境

  • 使用包管理工具pip:pip install djangoeasy_install django
  1. Django常用命令(终端窗口命令)

    • 新建Django项目:django-admin startproject project_name

    • 新建应用程序:django-admin startapp app_name

    • 同步数据库:

      python manage.py makemigrations
      python manage.py migrate
      
    • 开发服务器,该服务器方便开发和调试程序:python manage.py runserver 8080(默认端口8000)。

    • 清空数据库:python manage.py flush

    • 打开Django环境终端:python manage.py shell

  2. Django中包括model, url, view, template四大模块,分别对应了MVC模式的不同功能。

19.1 实现第一个Django项目

  1. 终端进入根目录 E:\ 进行指令django-admin startproject firstproject,会看见E盘生成以下目录。

    • 【manage.py】 一个实用的命令行工具,能以各种方式与该Django项目进行交互。

    • 【_init_.py】 一个空文件,告诉Python该目录是一个Python项目。

    • 【settings.py】 该Django项目的配置文件。

    • 【urls.py】 该Django项目的URL声明,一份有Django驱动的网站资源目录。

    • 【wsgi.py】 一个WSGI兼容的web服务器入口,用于运行项目。

    • 【asgi.py】 与ASGI兼容的web服务器为您的项目提供服务的入口点。

      image

  2. 终端进入【firstproject】项目目录,执行python manage.py startapp learn 新建应用【learn】,会看见出现以下子目录。
    image

  3. 在配置文件【settings.py】中找到 INSTALLED_APPS 添加以下代码,注册新建的应用,这样Python可以自动找到模板文件和静态文件。

    image

  4. 在应用目录【learn】中打开视图文件【views.py】编写视图函数,用于显示访问页面时的内容。

    #-*- coding: utf-8 -*-
    from django.http import HttpResponse     # 引入http响应消息对象
    def index(request):                      # 第一个参数必须是request对象,用于接收处理请求。
        return HttpResponse(u"欢迎光临,这里是第一个Django项目应用!")
    
  5. 打开【urls.py】文件,添加下列代码,建立url映射,关联这个视图函数。

    image

  6. 终端执行 python manage.py runserver 运行测试服务器,默认端口8000,打开浏览器访问localhost:8000,成功访问了项目应用。

    image

19.2 URL路径映射和传参

  1. Django项目中的URL模块和view模块对应的是MVC模式中的controller。视图是服务器收到用户请求后,展示返回的内容,而当服务器收到请求后,Django会根据项目下的【urls.py】文件中的路径映射,去相应的视图模块查找处理函数,再返回页面数据给客户端。

  2. 两个传参方法:

    • path() :实现路径映射和正常参数传递,格式:<类型:变量名>或<变量名>。

    • re_path() :实现正则表达式的路径映射和参数传递,格式:(?P<变量名>表达式)。

    • 例如将一个项目【blog】的【urls.py】文件中如下设置:

      from django.contrib import admin
      from django.urls import path, re_path
      from blog_app import views
      urlpatterns = [
          # 使用普通路径映射和参数传递。
          path("blog/article/<int:id>/", views.article, name="article"),
          # 使用正则表达式路径映射和参数传递。
          re_path(r"^blog/article/(?P<id>\d+)/$", views.article, name="article"),
          path("admin/", admin.site.urls),
      ]
      
  3. 设置路径映射时,可以将路径命名一个别名,相当于给URL命名一个全局变量,在网页模板中使用较为方便,如:

    //使用url别名作锚链接
    <a href="{% url "article" id %}">文本</a>
    //使用普通url作锚链接
    <a href="blog/article/id">文本</a>
    
  4. url别名只能在网页模板中使用,而不能在 view中使用,因此要用 reverse() 方法转化成普通url在 view中使用。

    from django.urls import reverse
    url = reverse("blog:article",args=[id])  # 项目名blog可作为命名空间。
    
  5. urls模块的path方法目前不能指向一个基于类的视图,Django的解决办法是提供一个as_visw()方法将一个类伪装成方法。

    from django.contrib import admin
    from django.urls import path
    from blog_app import views
    urlpatterns = [
        path("", views.ArticleClass.as_view(), name = "article_class"),
        path("admin/", admin.site.urls),
    ]
    
  6. 在配置url路径映射时,可以设置自定义传入额外的参数:

    from django.contrib import admin
    from django.urls import path
    from blog_app import views
    urlpatterns = [
        path("blog/article/<int:id>/", views.article, name = "article", {"bg":"black","display":3}),
        path("admin/", admin.site.urls),
    ]
    

19.3 view视图

  1. Django框架中,视图view通常和url路由一起工作,当服务器收到客户端请求后,会根据在【urls.py】文件中的路径映射,去视图中查找相应的处理函数,在返回http网页信息。

  2. 实际web开发中,view模块不仅要负责从数据库提取数据,而且需要设置用于显示内容的模板,并提供模板渲染页面所需的内容对象。

  3. render(request, template_path, context_obj, content_type)方法:用于转发请求给模板,并返回模板内容。

  4. get_object_or _404():默认调用Django的get方法,如果请求的资源不存在,则抛出http404状态。

  5. 项目示例待完善。。

posted @ 2021-11-01 17:04  DvLopr_Jarjack  阅读(85)  评论(0)    收藏  举报