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>
    
原文地址:https://www.cnblogs.com/Hades123/p/11317859.html