Django 开发连载 - 新建应用完整流程篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wujiandao/article/details/81570869

将新建一个应用的主要步骤罗列出来,作为一个建筑师没有一定的空间设计概念,在动工挖土之前胸中没有整体性的房屋结构框架,那肯定在之后的工作中会有很多返工。而经历了几个工程之后,相信我们拿捏这套流程会越来越熟练。

  1. 在项目中新建一个应用,将新建应用的目录结构部署好
  2. 在新建应用中,重点修改 urls.py, models.py, views.py 以及新建 templates 目录下的 Html 文件
  3. 在总项目下,要注册我们新建的应用
  4. 为新建应用配置一条 URL 访问路径
  5. migrate 同步元数据
在项目中新建一个应用,将新建应用的目录结构部署好

在已有项目顶层目录下,使用 startapp 新建应用并为其生成目录结构:

manage.py startapp crm
在新建应用中,重点修改 urls.py, models.py 以及新建 templates 目录下的 Html 文件

urls.py 指定了访问规则,每个 URL 入口都会指派一个视图函数 (view function):

# urls.py


from django.urls import path, include
import CRM.views

urlpatterns = [        path(r'',CRM.views.archive),
                       path(r'NewActivity', CRM.views.newActivity),

               ]

models.py 是真正与数据库相关的配置文件,可将其看成表。还是以 BlogPost 作为数据模型,鉴于第一次的数据模型定义 BlogPost 时,将其全部小写了- blogpost, 导致更新数据库失败。

# models.py
from django.db import models 

class BlogPost(models.Model):
    title = models.CharField(max_length=150)
    body = models.TextField()
    timestamp = models.DateTimeField()

views.py 是真正干活最多的组件,它连接了数据库,用户逻辑以及可视化模板:

# Create your views here.
# views.py

from django.shortcuts import render_to_response, render
from CRM.models import BlogPost
from django.template import RequestContext
from django.http import HttpResponseRedirect
import time
import datetime


def archive(request):
    posts = BlogPost.objects.all()
    curtime = datetime.datetime.now()
    context = {"posts": posts, "curtime": curtime}
    return render(request, 'Index.html', context)

Template Html 模板文件是可视化组件,Django 成文的规定,这份模板文件必须保存在 templates 目录下面。 如果我们的总项目是 DjangoWeb,那么必须在 DjangoWeb/CRM/ 目录下面再建一个 templates 目录

根据用户请求返回的数据,都将在这里展现给用户:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--  Index.html -->

<p>Welcome to CRM blog, Now it's time   {{ curtime }}</p> <br>

{% for post in posts %}
    <p> {{ post.title }} </p>
    <p> {{post.body  }}</p>
    <p> {{post.timestamp  }}</p>

{% endfor %}

</body>
</html>
在总项目下,要注册我们新建的应用

修改项目目录下 settings.py 的 INSTALLED_APPS 列表,加上 CRM

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blogsearch',
    'CRM',
]
为新建应用配置一条 URL 访问路径

在项目目录下有一个 urls.py 文件,用来控制所有的 URL 访问规则:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blogsearch/',include('blogsearch.urls')),
    path('blogsearch/create/',include('blogsearch.urls')),
    path('CRM/',include('CRM.urls')),

]

在这里添加

path('CRM/',include('CRM.urls')),

就是截取 URL 访问字符串,交由 CRM.urls 处理,即 CRM 应用目录下的 urls.py 解析。截取的字符串,包括了 CRM/ , 因此 CRM.urls 配置的路径:

# urls.py


from django.urls import path, include
import CRM.views

urlpatterns = [        path(r'',CRM.views.archive),
                       path(r'NewActivity', CRM.views.newActivity),

               ]

中第一条, path(r”,CRM.views.archive’) 就是用来承接项目总 URL 规则设定文件解析过来的文本片段

项目 URL 规则,一旦包含了 include 就会截取顶级的 URL 节点 而只留下一段 URL 片段,根据这一片段我们才能指定他对应的 URL 解析器,即由对应的 urls.py 来解析这份片段到底安排哪个视图函数来执行。

如果 127.0.0.1:8000/CRM 被项目 urls.py 截取之后剩下空文本, 并安排 CRM/urls.py 来解析,那么CRM 就会对应了 CRM.Views.archive 视图函数

同理,127.0.0.1:8000/CRM/NewActivity 就会被 CRM.Views.newActivity来执行。

Migrate

这一步非常强大,他实现的是将我们的数据模型与数据库同步,并且保存必要的 Djnagon 组件配置信息

manage.py makemigrations
manage.py migrate

makemigrations 识别所有的更改
migrate(替换 Syncdb)同步数据库元数据

在调用该命令之前,一定要运行 activate ,在 windows 下是 activate.bat, 否则会出现如下错误:

ImportError: Couldn’t import Django. Are you sure it’s installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?


一点扩展补充


Admin 模块

应用是需要用户交互才能产生价值的,因此在没有完成细致的 UI 之前,我们迫切的渴望在不等待 UI 竣工的前提下,将数据接口部分实现好。此时 Admin 模块就产生巨大价值了。

在已经有应用的项目中,新建一个应用,并将该应用的数据模型与 Admin 窗口链接起来。此时的 Admin 会默认识别所有应用下面的 Admin.py 文件,并读取里面的配置信息。

Admin 模块在整个 Django 项目中是唯一的,如果需要绑定相应的应用模型,只需要在本应用下面的 Admin.py 注册对应的 model 即可。该 model 来自于 models.py 文件中的定义。

在 Django 2.1 版本中,所有的工作 Django 都为我们做好了,只要配置好应用下 Admin.py 的模型引用即可

#admin.py 

from django.contrib import admin 
from CRM import models


admin.site.register(models.BlogPost,CRMAdmin)

猜你喜欢

转载自blog.csdn.net/wujiandao/article/details/81570869
今日推荐