• Django学习


    django-admin startproject myproject  #创建项目
    python manage.py runserver  #运行核心文件
    django-admin startapp boards。#创建app

    settings下添加app
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
        'boards',  
    ]
    views.py #操作实图文件
    from django.http import HttpResponse
    
    def home(request):
        return HttpResponse('Hello, World!')
    myproject/urls.py。#绑定url

    from django.conf.urls import url
    from django.contrib import admin
    
    from boards import views
    
    urlpatterns = [
        url(r'^$', views.home, name='home'),
        url(r'^admin/', admin.site.urls),
    ]
    boards/views.py. #修改视窗

    from django.http import HttpResponse
    
    
    from django.http import HttpResponse
    from .models import Board

    def home(request):
    boards = Board.objects.all()
    boards_names = list()

    for board in boards:
    boards_names.append(board.name)

    response_html = '<br>'.join(boards_names)

    return HttpResponse(response_html)

    在manage.py所在的目录创建一个名为 templates的新文件夹:

    myproject/
     |-- myproject/
     |    |-- boards/
     |    |-- myproject/
     |    |-- templates/   <-- 这里
     |    +-- manage.py
     +-- venv/

    templates/home.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Boards</title>
      </head>
      <body>
        <h1>Boards</h1>
    
        {% for board in boards %}
          {{ board.name }} <br>
        {% endfor %}
    
      </body>
    </html>

    打开myproject目录下面的settings.py文件,搜索TEMPLATES变量,并设置DIRS 的值为 os.path.join(BASE_DIR, 'templates')

    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',
                ],
            },
        },
    ]

    我们可以用一个更漂亮的表格来替换,改进HTML模板:

    templates/home.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Boards</title>
      </head>
      <body>
        <h1>Boards</h1>
    
        <table border="1">
          <thead>
            <tr>
              <th>Board</th>
              <th>Posts</th>
              <th>Topics</th>
              <th>Last Post</th>
            </tr>
          </thead>
          <tbody>
            {% for board in boards %}
              <tr>
                <td>
                  {{ board.name }}<br>
                  <small style="color: #888">{{ board.description }}</small>
                </td>
                <td>0</td>
                <td>0</td>
                <td></td>
              </tr>
            {% endfor %}
          </tbody>
        </table>
      </body>
    </html>

    静态文件是指 CSS,JavaScript,字体,图片或者是用来组成用户界面的任何其他资源。

    实际上,Django 本身是不负责处理这些文件的,但是为了让我们的开发过程更轻松,Django 提供了一些功能来帮助我们管理静态文件。这些功能可在 INSTALLED_APPS 的 django.contrib.staticfiles 应用程序中找到(译者:Django为了使得开发方便,也可以处理静态文件,而在生产环境下,静态文件一般直接由 Nginx 等反向代理服务器处理,而应用工服务器专心负责处理它擅长的业务逻辑)。

    市面上很多优秀前端组件框架,我们没有理由继续用简陋的HTML文档来渲染】。我们可以轻松地将Bootstrap 4添加到我们的项目中。Bootstrap是一个用HTML,CSS和JavaScript开发的前端开源工具包。

    在项目根目录中,除了 boards, templates 和myproject文件夹外,再创建一个名为static的新文件夹,并在static文件夹内创建另一个名为css的文件夹:

    myproject/
     |-- myproject/
     |    |-- boards/
     |    |-- myproject/
     |    |-- templates/
     |    |-- static/       <-- here
     |    |    +-- css/     <-- and here
     |    +-- manage.py
     +-- venv/

    下载编译版本的CSS和JS

    在你的计算机中,解压 bootstrap-4.0.0-beta-dist.zip 文件,将文件 css/bootstrap.min.css 复制到我们项目的css文件夹中:

    myproject/
     |-- myproject/
     |    |-- boards/
     |    |-- myproject/
     |    |-- templates/
     |    |-- static/
     |    |    +-- css/
     |    |         +-- bootstrap.min.css    <-- here
     |    +-- manage.py
     +-- venv/

    下一步是告诉Django在哪里可以找到静态文件。打开settings.py,拉到文件的底部,在STATIC_URL后面添加以下内容:

    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = [
       os.path.join(BASE_DIR, 'static'),
    ]

    还记得 TEMPLATES目录吗,和这个配置是一样的

    现在我们必须在模板中加载静态文件(Bootstrap CSS文件):

    templates/home.html

    {% load static %}<!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Boards</title>
        <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
      </head>
      <body>
       <h1>Boards</h1>
    
    <table border="1">
        <thead>
        <tr>
            <th>Board</th>
            <th>Posts</th>
            <th>Topics</th>
            <th>Last Post</th>
        </tr>
        </thead>
        <tbody>
        {% for board in boards %}
            <tr>
                <td>
                    {{ board.name }}<br>
                    <small style="color: #888">{{ board.description }}</small>
                </td>
                <td>0</td>
                <td>0</td>
                <td></td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    </body>
    </html>

    现在我们可以编辑模板,以利用Bootstrap CSS:

    {% load static %}<!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Boards</title>
        <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
      </head>
      <body>
        <div class="container">
          <ol class="breadcrumb my-4">
            <li class="breadcrumb-item active">Boards</li>
          </ol>
          <table class="table">
            <thead class="thead-inverse">
              <tr>
                <th>Board</th>
                <th>Posts</th>
                <th>Topics</th>
                <th>Last Post</th>
              </tr>
            </thead>
            <tbody>
              {% for board in boards %}
                <tr>
                  <td>
                    {{ board.name }}
                    <small class="text-muted d-block">{{ board.description }}</small>
                  </td>
                  <td class="align-middle">0</td>
                  <td class="align-middle">0</td>
                  <td></td>
                </tr>
              {% endfor %}
            </tbody>
          </table>
        </div>
      </body>
    </html>

    我们首先创建一个管理员帐户:

     
    python manage.py createsuperuser

    它已经配置了一些功能。在这里,我们可以添加用户和组的权限管理,这些概念在后面我们将探讨更多。

    添加Board模型非常简单。打开boards目录中的admin.py文件,并添加以下代码:

    boards/admin.py

    from django.contrib import admin
    from .models import Board
    
    admin.site.register(Board)

    在本节课中,我们将深入理解两个基本概念: URLs 和 Forms。在这个过程中,我们还将学习其它很多概念,如创建可重用模板和安装第三方库。同时我们还将编写大量单元测试。

    如果你是从这个系列教程的 part 1 跟着这个教程一步步地编写项目,你可能需要在开始之前更新 models.py:

    boards/models.py

    class Topic(models.Model):
        # other fields...
        # Add `auto_now_add=True` to the `last_updated` field
        last_updated = models.DateTimeField(auto_now_add=True)
    
    class Post(models.Model):
        # other fields...
        # Add `null=True` to the `updated_by` field
        updated_by = models.ForeignKey(User, null=True, related_name='+')

    数据库映射

    python manage.py makemigrations
    python manage.py migrate

    myproject/urls.py

    from django.conf.urls import url
    from django.contrib import admin
    
    from boards import views
    
    urlpatterns = [
        url(r'^$', views.home, name='home'),
        url(r'^boards/(?P<pk>d+)/$', views.board_topics, name='board_topics'),
        url(r'^admin/', admin.site.urls),
    ]

    myproject/settings.py

    ROOT_URLCONF = 'myproject.urls'

    现在创建视图函数 board_topics

    boards/views.py

    from django.shortcuts import render
    from .models import Board
    
    def home(request):
        # code suppressed for brevity
    
    def board_topics(request, pk):
        board = Board.objects.get(pk=pk)
        return render(request, 'topics.html', {'board': board})

    在 templates 目录中,创建一个名为 topics.html 的模板: {% raw %}

    templates/topics.html

    {% load static %}<!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>{{ board.name }}</title>
        <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
      </head>
      <body>
        <div class="container">
          <ol class="breadcrumb my-4">
            <li class="breadcrumb-item">Boards</li>
            <li class="breadcrumb-item active">{{ board.name }}</li>
          </ol>
        </div>
      </body>
    </html>
  • 相关阅读:
    [Python] 糗事百科文本数据的抓取
    [Python] 文件扫描
    [Python] 根据博客园用户名抓取其所有文章的标题及其链接
    ParagraphString
    IrregularGridCollectionView处理不定宽度的标签cell
    Java多线程与并发
    设计模式之代理模式
    javascript设置百分比保留两位小数。
    Java基础知识总结(异常机制、集合、JUC、IO)
    Java底层知识JVM、GC
  • 原文地址:https://www.cnblogs.com/zj0724/p/9162225.html
Copyright © 2020-2023  润新知