首页 > 技术文章 > 【Django笔记2】-创建应用(app)与模型(models)

tensorzhang 2020-10-23 19:55 原文

1,创建应用(app)

​ 一个完善的网站需要许多功能提供不同的服务。如果所有的功能都在一个文件中,不利于项目多人共同开发,以及后续的维护。此时可以针对一个要实现的功能,创建一个app,将多个app结合起来完成网站的建设。不同app之间可以通过url进行跳转。

  • 在命令行中输入以下代码创建一个app

    python manage.py startapp app1
    

    创建app后的目录树结构为

    TEST1
    │  manage.py
    │
    ├─app1
    │  │  admin.py
    │  │  apps.py
    │  │  models.py
    │  │  tests.py
    │  │  views.py
    │  │  __init__.py
    │  │
    │  └─migrations
    │          __init__.py
    │
    ├─templates
    │      hello.html
    │
    └─test1
        │  asgi.py
        │  settings.py
        │  urls.py
        │  views.py
        │  wsgi.py
        │  __init__.py
        │
        └─__pycache__
                settings.cpython-36.pyc
                urls.cpython-36.pyc
                views.cpython-36.pyc
                wsgi.cpython-36.pyc
                __init__.cpython-36.pyc
    
    
  • 在settings.py中对新创建的app进行注册

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app1'	#新添加的
    ]
    
  • 修改app1中的views.py,并在templates中创建app1.html,实现预想的效果

    from django.shortcuts import render
    
    # Create your views here.
    def functionApp1(request):
        return render(request, 'app1.html')
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <center>
        欢迎使用app1
    </center>
    
    </body>
    </html>
    
  • 为app中的views.py分配路由映射,这里不同与在原来的项目主文件中分配路由映射(只需要一步),这里分配路由映射需要两步。

    • 在app1中创建urls.py,之后分配路由映射

      from django.conf.urls import url
      from . import views
      
      urlpatterns = [
          url(r'^$', views.functionApp1)
      ]
      
    • 在test1(最初生成的文件夹)中分配路由映射

      from django.contrib import admin
      from django.urls import path
      from django.conf.urls import url, include
      from . import views
      
      urlpatterns = [
          path('admin/', admin.site.urls),
          url(r'^hello/$', views.HelloWorld),
          url(r'^app1/$', include('app1.urls'))	#新添加的
      ]
      
  • 此时打开链接 http://127.0.0.1:8001/app1/ ,可以发现已经是app1的内容了

  • 也可以在app页面与原来的页面相互建立链接,实现页面的跳转。

    hello.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        hello world! <br>
        {{name}} <br>
    
        <!-- url跳转 -->
        <a href="https://www.cnblogs.com/tensorzhang/">
            tensor_zhang的博客园
        </a><br>
    
        <a href="http://127.0.0.1:8001/app1/">
            应用1
        </a>
    
        <!-- 提交文件 -->
        <form>
            <input type="file" name="myfile">
            <input type="submit" value="提取文件">
        </form>
    
    </body>
    </html>
    

    app1.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        <center>
            欢迎使用app1
        </center>
    
        <a href="http://127.0.0.1:8001/hello/">
            欢迎界面
        </a>
    
    </body>
    </html>
    


2,Models模块

​ django通过models模块与数据库进行互动。

  • 打开app1中的models.py文件,输入以下代码:

    from django.db import models
    
    # Create your models here.
    class Article(models.Model):
        title = models.CharField(max_length=30)
        content = models.TextField()
    
  • 同步数据库,将models中创建的新类以及其属性同步到数据库中,在cmd中输入:

    python manage.py makemigrations
    python manage.py migrate
    

    会发现在app1/migrations中会生成一个文件0001_initial.py,里面是models.py中Article的信息,此时的路径是:

    TEST1
    │  manage.py
    │
    ├─app1
    │  │  admin.py
    │  │  apps.py
    │  │  models.py
    │  │  tests.py
    │  │  urls.py
    │  │  views.py
    │  │  __init__.py
    │  │
    │  ├─migrations
    │  │  │  0001_initial.py
    │  │  │  __init__.py
    │  │  │
    │  │  └─__pycache__
    │  │          __init__.cpython-36.pyc
    │  │
    │  └─__pycache__
    │          admin.cpython-36.pyc
    │          models.cpython-36.pyc
    │          urls.cpython-36.pyc
    │          views.cpython-36.pyc
    │          __init__.cpython-36.pyc
    │
    ├─templates
    │      app1.html
    │      hello.html
    │
    └─test1
        │  asgi.py
        │  settings.py
        │  urls.py
        │  views.py
        │  wsgi.py
        │  __init__.py
        │
        └─__pycache__
                settings.cpython-36.pyc
                urls.cpython-36.pyc
                views.cpython-36.pyc
                wsgi.cpython-36.pyc
                __init__.cpython-36.pyc
    
  • 在后台管理的展现通过修改admin.py进行修改

    from django.contrib import admin
    from .models import Article
    
    # Register your models here.
    admin.site.register(Article)
    
  • 之后进入django的admin界面,创建并登陆超级用户后就可以看到创建出来的新选项(mysql后台打印tables也会发现多出来了一个)

    # 创建超级用户
    python manage.py createsuperuser
    # 输入 用户名、 邮箱(可跳过)、 密码
    

推荐阅读