Django学习笔记

111 阅读2分钟

在project中创建app

  • 一个Django包含了很多的app,每个app都有一个文件夹
  1. python3 manage.py startapp appname创建一个文件夹。
  2. 文件夹下添加view.py文件
  3. 文件夹下添加urls.py文件
  4. 在主app中urls.py中包含这个app中urls

在app使用model(database table)

  • model 的class variables就是database中列
  1. models.py 增加model(table)
  2. 主app中settings.py INSTALLED_APPS中添加 app
  3. python3 manage.py makemigrations appname
  4. python3 manage.py migrate

创建template

避免每次修改view都需要改动python的代码

  1. 在app文件夹中创建一个template/appname/index.html的文件
  2. 更新views.py(loader载入模板,render映射模板)

template教程 docs.djangoproject.com/en/3.2/topi…

Example with LTE admin

  1. pip3 install django django-adminlte-3

  2. django-admin startproject demoproject to create a project.

  3. set ALLOWED_HOSTS = ["*"] in setttings.py to allow all ip.

  4. python3 manage.py startapp myapp to create an app

  5. create a myapp/template/myapp/show.html

    {% extends 'adminlte/base.html' %}
    
    {% block title %}Overview{% endblock %}
    {% block content %}
    <canvas id="myChart" width="400" height="400"></canvas>
    <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.0"></script>
    <script>
    var ctx = document.getElementById('myChart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: {{x}},
            datasets: [{
                label: '# of Votes',
                data: {{y}},
                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)',
                    'rgba(75, 192, 192, 0.2)',
                    'rgba(153, 102, 255, 0.2)',
                    'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                    'rgba(255, 99, 132, 1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                    'rgba(75, 192, 192, 1)',
                    'rgba(153, 102, 255, 1)',
                    'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
    </script>
    {% endblock %}
    
  6. edit views.py in myapp folder

    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import MyOwnData
    # Create your views here.
    def index(request):
        if not MyOwnData.objects.count():
            for i in range(10):
                item = MyOwnData()
                item.x = i
                item.y = 2*i
                item.save()
        x =list(MyOwnData.objects.values_list("x",flat=True))
        y = list(MyOwnData.objects.values_list("y",flat=True))
        return render(request,"myapp/show.html",{"x":x,"y":y})
    
  7. add urls.py in myapp folder

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.index, name='index'),
    ]
    
  8. edit urls.py in main app folder to register

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('myapp/', include('myapp.urls')),
        path('admin/', admin.site.urls),
    ]
    
  9. add models.py in myapp folder

    from django.db import models
    
    # Create your models here.
    class MyOwnData(models.Model):
        x = models.FloatField(default=0.0)
        y = models.FloatField(default=0.0)
    
  10. edit settings.py to register model

    INSTALLED_APPS = [
        'adminlte3',
        'myapp.apps.MyappConfig',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
  11. python3 manage.py makemigrations myapp && python3 manage.py migrate

  12. python3 manage.py runserver 0:6000