Django+Vue.js - 第一章 走进Django

第一章 走进Django

了解Django

Django 诞生于2003年,在2006年加入BSD许可协议,成为开源Web框架

优势

  • 功能完善,容易上手,开发速度快,安全性强;
  • 完善的在线文档;
  • 模型自带数据库ORM(Object-Relational Mapping 对象关系映射)组件;开发无需学习其他数据库访问技术
  • 可以使用正则表达管理路由映射;

MVC 与 MTV

主流web框架基本都使用MVC或MTV模式;使用 MVC 模式最大的优势是可以降低系统各个模块间的耦合度

MVC

  • M(Model): 各个功能的实现(CRUD),其中包含模型实体类和业务处理类;
  • V(View): 负责页面显示和用户交互,包含有html,css,js组成的各种页面;
  • C(Controller):用于将用户请求转发给相应的模型处理,并根据模型的处理结果向用户提供相应的响应。

MTV

  • M(Model): 负责业务对象和数据的关系映射(ORM)
  • T(Template): 负责页面显示和用户交互,包含有html,css,js组成的各种页面;
  • V(View): 负责业务逻辑,在适当的时候调用Model和 Template;

image

安装

pip install django

创建项目

django-admin startproject django_demo_1

此时项目文件如下

django_demo_1/				# 根目录,与项目无关,可以随意命名
├── django_demo_1			# 项目目录
│   ├── asgi.py				# 与ASGI 兼容的web服务器,为项目提供服务的入口
│   ├── __init__.py			# 视该目录为包
│   ├── settings.py			# 全局配置文件 通过from django.conf import settings引用
│   ├── urls.py				# 全局路由配置,一般在其中配置引用app路径和静态文件路径
│   └── wsgi.py				# 兼容WSGI的web服务器,为项目提供服务的入口
└── manage.py				# 命令行使用程序,通过命令行方式与Django项目进行交互

创建app

cd django_demo_1
python manage.py startapp app1

#################
├── app1
│   ├── admin.py		# admin后台管理使用
│   ├── apps.py			# 应用管理使用
│   ├── __init__.py		
│   ├── migrations		# 数据迁移目录
│   │   └── __init__.py
│   ├── models.py		# 模型文件 Models
│   ├── tests.py		
│   └── views.py		# 测试用例
├── django_demo_1
│   ├── asgi.py
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   └── settings.cpython-38.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

创建应用后应在全局配置文件中注册应用

vim django_demo_1/settings.py

ALLOWED_HOSTS = ['*'] # 允许访问地址,


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1',
]

处理控制器

Django,控制器主要由视图文件views.py和路由文件url.py组成

views 实现具体的处理逻辑,返回响应

render函数将参数三【字典或对象】(若有)提交给参数二指向的html文件进行渲染

# app1/views.py
from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request, "app1/index.html")

url 实现路由,控制每个请求到达哪个视图函数;

通常在主urls中采用引用app下urls的方法实现层级路由

# django_demo_1/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app1/', include('app1.urls'))
]

# app1/urls.py
from django.urls import path
from . import views as a1_v

prefix = 'app1'
urlpatterns = [
    path("index/", a1_v.index),  # 访问路径 'app1/index'
]
# 使用 index/ 则访问 index 或 index/均能到达此视图,使用index则不行

为使得render函数正确执行,需要在全局配置文件中指定模板文件所在目录

# django_demo_1/settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 增加目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

在 manage.py 所在目录创建templates目录存储模板文件

├─app1
│  ├─migrations     
│  │  └─__pycache__
│  └─__pycache__
├─django_demo_1
│  └─__pycache__
└─templates
    └─app1
    | └─index.html
    └─40x.html
    └─50x.html
    └─framework.html

templates/app1/index.html 文件内容如下

{% extends 'framework.html'%}
{% block head %}
{% endblock %}
{% block body %}
<h1>这是index页</h1>
{% endblock %}

这里使用了django中模板的继承和引用语法,后续会讲
framework.html 文件内容如下

<!DOCTYPE html>
<html lang="CN">
<head>
    <meta charset="UTF-8">
    <title>Page</title>
    {% block head %}
    {% endblock %}
</head>

<body>
    
{% include 'header.html' %}

{% block body %}
{% endblock %}
<!-- footer -->
{% include 'footer.html' %}
</body>
</html>

其中header.html 和 footer.html 目前为空,为以后预留

访问 app1/index
image

第一个app的第一个简陋的页面完成!

posted @ 2023-11-17 01:24  爻意爻  阅读(42)  评论(0)    收藏  举报