Django项目搭建1

学习目标

知道MVT设计模式中MVT分别代表的含义
能够使用命令创建Django工程和子应用
知道如何在Django中定义视图及路由
理解Django路由的匹配流程
能够区分命名参数和未命名参数的区别
知道如何使用request对象获取查询字符串参数
知道如何使用request对象获取请求体数据

Django MVT

对项目进行分层的一种软件设计模式;

核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高程序的可扩展性和可维护性。

  • M全拼为 Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
  • V全拼为 View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
  • T全拼为 Template,与MVC中的V功能相同,负责封装构造要返回的html。

项目搭建

  1. 项目和应用的创建 (两种方式)

    • pycharm
    • 命令行
    django-admin startproject 项目名
    python manage.py startapp 应用名
    
  2. 运行服务器

    python manage.py runserver  				  # 使用默认ip和端口
    python manage.py runserver  127.0.0.1:8000    # 手动指定ip和端口
    
  3. 视图初步使用

    • 定义视图(函数)
    def index(request):
        return HttpResponse("hello django")
    
    • 在与全局的 url.py 中配置路由
      urlpatterns = [
          ...    
          # 配置路由和视图: http://127.0.0.1:8000/users/index
          # 参数1: 匹配url的正则表达式
          # 参数2: 匹配成功后由Django框架调用的视图函数
          url(r'^users/index$', views.index),
      ]
    
  4. 模板初步使用

    • 创建模板文件

    • 指定模板文件所在的目录(pycharm创建的项目默认已经指定)

      # settings.py
      TEMPLATES = [
          {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              
              # 指定模板文件所在的目录
              'DIRS': [os.path.join(BASE_DIR, 'templates')],
               ...
          },
      ]
      
    • 在视图中通过 render 函数使用模板

      def index(request):
          context = {'name': 'python'}
          return render(request, 'users/index.html', context)
      

配置

常用配置项

  • BASE_DIR 默认为项目的根目录 【理解,后面项目会用到】

  • DEBUG 是否开启调试模式

    • 开发阶段设置为True, 会输出项目调试信息;(开发模式,调试模式)
    • 项目上线后设置为False,不会输出项目调试信息;(生产模式,上线模式)
  • 语言和时区配置

    LANGUAGE_CODE = 'zh-hans'		# 指定为中文
    TIME_ZONE = 'Asia/Shanghai'		# 指定时区
    
  • INSTALLED_APPS:什么情况下需要注册应用?【理解,如果提示TemplateDoesNotExist知道是什么原因】

    • 要根据应用中的模型类生成表
    • 要用到应用中的模板
    class UsersConfig(AppConfig):
        name = 'users'
    
    INSTALLED_APPS = [
         ...    
        'users.apps.UsersConfig',		# 方式一
        # 'users'   					# 方式二  
    ]
    

静态文件使用配置

静态文件: css, js, images

配置:

  • STATIC_URL:访问静态文件时使用的url前缀, (使用默认值即可,不需要配置)
  • STATICFILES_DIRS:配置静态文件保存在哪个目录下(配置手动配置)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_files')]
  • index.html模板中使用 图片 或js静态文件

    1537065618150

    注意:django测试服务器仅在调试模式下支持静态文件的使用

URL配置

针对 http://127.0.0.1:8000/user/index 进行路由配置,习惯分开两部分来配置

项目的 urls.py:

  urlpatterns = [
      ...
      url(r'^users/', include('users.urls')),
  ]

应用的 urls.py

  urlpatterns = [
  	  ...
      url(r'^index$', views.index), 
  ]

捕获URL中的参数【重要】

http://127.0.0.1:8000/news/1/2

  • 未命名参数:按位置传递

    url(r'^news/(\d+)/(\d+)$', users.views.news),
     
    def news(request, a, b):
    	return HttpResponse("显示新闻:%s %s" % (a, b))
    
  • 命名参数:按名字传递

    url(r'^news/(?P<category>\d+)/(?P<page>\d+)$', users.views.news),
    
    def news(request, category, page):
        return HttpResponse("显示新闻:%s %s" % (category, page))
    

客户端传参的几种方式

传参方式 示例 如获取参数 备注
url路径(path) /news/1/2 正则
查询字符串 /news2?category=1&page=2 request.GET QueryDict
请求体:表单类型的数据 category=1&page=2 request.POST QueryDict
请求体:非表单类型的数据(json, xml) {“category”:1,“page”:2} request.body bytes
请求头 category=1 page=2 request.META 字典

QueryDict对象

类似字典,一键可以有多个值

get方法: 获取值
getlist方法:获取多个值,返回列表
request.GET,request.POST 都为QueryDict类型的对象

request对象

request属性 说明 备注
GET 获取查询字符串参数 (与请求方式无关) QueryDict
POST 获取请求体中的表单类型的数据(与请求方式有关,仅限post请求) QueryDict
body 获取请求体非表单类型的数据,比如:json bytes
META 获取请求头中的数据
(获取自定义属性时,需要 加前缀HTTP_, 转大写)
字典
user 当前访问的登录用户对象

问题1:当请求方式为 post ,是否可以通过 reqeust.GET 获取查询查询字符串参数?

可以

问题2:当请求方式为 put , 是否可以通过 request.POST 获取到请求体中的表单数据?

不可以,需要用request.body获取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章