zoukankan      html  css  js  c++  java
  • Django基础

    Django基础

    MVC与MTV模型

    MVC

    Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:

    MTV

    Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

    • M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
    • T 代表模板 (Template):负责如何把页面展示给用户(html)。
    • V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。

    除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:

    一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

    Django初始

    • 安装

      两种方法:

      1. 直接再终端安装,pip install django==1.11.22
      2. 再pycharm里面安装,pycharm --> settings -->projict:xxx --> Project Interpreter -->点击+图标,然后搜索django,再设定版本(1.11.22)
    • 创建

      两种方法:

      1. 直接在终端里启动,django-admin startproject xxx
      2. 在pycharm创建,file --> new project,选择Django就可以了
      """
      创建完了之后,需要确认配置文件的以下三个方面:
      
      1. STATIC_URL = '/static/'
      	STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
      	注意:逗号不能少且static目录需要创建(在html页面中需要通过外联式导入css样式/js/img文件的时候,需要在根目录下创建一个static文件,用于存放css/js/img文件)
      
      2. MIDDLEWARE = [
      					'django.middleware.security.SecurityMiddleware',
      					'django.contrib.sessions.middleware.SessionMiddleware',
      					'django.middleware.common.CommonMiddleware',
      					#'django.middleware.csrf.CsrfViewMiddleware',  # 
      					'django.contrib.auth.middleware.AuthenticationMiddleware',
      					'django.contrib.messages.middleware.MessageMiddleware',
      					'django.middleware.clickjacking.XFrameOptionsMiddleware',
      				]
      				
      3. 'DIRS': [os.path.join(BASE_DIR, 'templates')] # 如果不存在需要添加
      """
      
    • 目录结构

      """
      |- myproject
      
      ​	|- myproject: 主体文件
      ​		| - __init__: 包的init文件
      		| - settings.py: 配置文件
      		| - urls.py: 路由映射关系
      		| - wsdi.py: socket服务端文件
      ​	| - manage.py: 管理文件
      
      """
      
    • 启动

      直接在pycharm中启动,需要启动整个Django文件而不是里面的某一个子文件

    Django的使用

    路由介绍

    路由就是一个函数映射关系,有一个映射对应的就需要有一个函数

    def index(request):  # 注意:每一个函数都需要一个request参数,无论是否需要用到
    	return HttpResponse('index')
    
    urlpatterns = [
    	# url(r'^admin/', admin.site.urls),
    	url(r'^index/', index),
        url(r'^f1/',f1)
    ]
    

    模板介绍

    • 模板渲染函数,没有变量替换

      def index():
          return render(request,filepath)
      
    • 有变量替换

      def f1(request):
          ### 变量
          name = 'zekai'
      
          ### 列表
          li = ['zekai', 'lxxx', 'leijun']
      
          ### 字典
          dict = {"name":'zekai', 'age':18, 'hobby':'bj'}
      
          ### 列表中套字典
          myli = [
              {'id': 1, 'name': 'zekai', 'age': 12},
              {'id': 2, 'name': 'yuechun', 'age': 32},
              {'id': 3, 'name': 'lifu', 'age': 23}
          ]
      
      
          return render(request, 'f1.html', {"xxx":name, "li":li, 'dict':dict, 'myli':myli})
      

      f1.html

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <title>Title</title>
      </head>
      <body>
      {# 变量渲染 #}
          <h2>{{ xxx }}</h2>
      {#列表的渲染#}
      <ul>
          <li>{{ li.0 }}</li>
          <li>{{ li.1 }}</li>
          <li>{{ li.2 }}</li>
      </ul>
      
      <hr>
      {#列表的循环#}
      <ul>
          {% for items in li %}
              <li>{{ items }}</li>
          {% endfor %}
      </ul>
      
      {#字典的渲染#}
      <h3>{{ dict.age }}</h3>
      
      {#字典的循环#}
      
      <ul>
          {% for items in dict.values %}
              <li>{{ items }}</li>
          {% endfor %}
      </ul>
      
      <ul>
          {% for items in dict.keys %}
              <li>{{ items }}</li>
          {% endfor %}
      </ul>
      
      <ul>
          {% for key, val in dict.items %}
              <li>{{ key }} --- {{ val }}</li>
          {% endfor %}
      </ul>
      
      {#列表中套字典格式#}
      <table border="1px">
          <thead>
              <tr>
                  <th>id</th>
                  <th>name</th>
                  <th>age</th>
              </tr>
          </thead>
          <tbody>
              {% for items in myli %}
                  <tr>
                      <td>{{ items.id }}</td>
                      <td>{{ items.name }}</td>
                      <td>{{ items.age }}</td>
                      <td><a href="/f2/">删除</a></td>
                  </tr>
              {% endfor %}
      
          </tbody>
      </table>
      
      
      </body>
      </html>
      
  • 相关阅读:
    AspNetPager.dll 分页控件使用方法、含有代码示例 [转]
    XmlDocument序列化到Session[转]
    静态构造函数
    错误日志[常用方法]
    Vss 源代码管理中的目录问题
    StopWatch 获得更精确的运行时间
    最近写的一个验证码.
    windowsservice 中的 currentdirectory
    vs2005常用快捷键(转贴)
    一个mapyEasy 图片切割工具 及源码
  • 原文地址:https://www.cnblogs.com/Hades123/p/11317859.html
Copyright © 2011-2022 走看看