Django的秘笈

前言

在学习Django时,有一些规则性的要求,以及初学者特有的句法和写法,这些可以称之为“呪文”。为了避免与其他语言的“呪文”混淆或错误地使用类似的“呪文”,我们需要将这些“呪文”记录在自己的文档中,以供参考。

环境

    • windows11 64bit

 

    • VScode

 

    • python v3.9.6 64bit

 

    django v4.0.1

构成

项目创建

django-admin startproject hogehoge

应用程序开发

python manage.py startapp hogehoge

创建数据库

python manage.py migrate

创建用户 (Yuè zhě de zuò

python manage.py createsuperuser

服务器启动

python manage.py runserver 

其他

mkdir templates
mkdir static
mkdir media
touch ./hogehogeapp/urls.py
touch ./templates/base.html
touch ./templates/hoge.html
touch ./static/style.css

构成

- hogehogeproject
 - hogehogeproject
 - hogehogeapp
 - templates
 - static
 - media
 - db.sqlite3
 - manage.py

编码

hogehogeproject/setting.py的设定文件

# ベースのパスの追加
BASE_DIR = Path(__file__).resolve().parent.parent

# アプリケーションの組み込み
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hogehogeapp',
]

# テンプレートの指定
TEMPLATES = [
    {
        'BACKEND': ...,
        'DIRS': [BASE_DIR, 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            ...,
        },
    },
]

# cssの指定
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/

STATIC_URL = 'static/'

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

# 画像の指定
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 画像を保存するURL

MEDIA_URL = '/media/' #画像を表示するURL

模板/基本.html

从这里复制起始模板,创建一个块。

<!doctype html>
<html lang="ja">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    {% block customcss %}
    {% endblock customcss %}

    <title>Hello, world!</title>
  </head>
  <body>
    {% block header %}
    {% endblock header %}

    {% block content %}
    {% endblock content %}

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
    -->
  </body>
</html>


模板/hohe.html

{% extends 'base.html' %}
{% load static %}

{% block customcss %}
<link rel='stylesheet' type='text/css' href="{% static 'style.css' %}">
{% endblock customcss %}

{% block header %}
{% endblock header %}

{% block content %}
{% endblock content %}

给出的建议

    フォームを使用する場合はトークンを付与する
<form method="POST" action="">{% csrf_token %}
</form>

hogehogeproject/urls.py的中文释义如下:

豪格豪格项目/urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('hogehogeapp.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

好好app的模型

from django.db import models

class HogeModel:
    title = models.CharField(max_length=100)
    txt = models.TextField()
    no = models.IntegerField()
    duedate = models.DateField()
    def __str__(self):
        return self.title

使用hogehogeapp/views.py文件中的原始代码进行重新表述的中文版本。

# import
from django.views.generic import ListView, DetailView, CreateView, DeleteView, UpdateView
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.urls import reverse_lazy

# 関数型
def hogefunc(request):
    return HttpResponse("Hello, World!")

def hoge1func(request):
    return render(request, 'hogehoge.html')

@login_required
def hoge2func(request):
    return redirect('hoge2')

# クラス型
class HogeList(ListView):
    template_name = 'hoge.html'
    model = HogeModel

class HogeDetail(DetailView):
    template_name = 'hoge.html'
    model = HogeModel

class HogeCreate(CreateView):
    template_name = 'hoge.html'
    model = HogeModel
    fields = ('title', 'txt', 'no', 'duedate')
    success_url = reverse_lazy('hoge')

class HogeDelete(DeleteView):
    template_name = 'hoge.html'
    model = HogeModel
    success_url = reverse_lazy('hoge')

class HogeUpdate(UpdateView):
    template_name = 'hoge.html'
    model = HogeModel
    fields = ('title', 'txt', 'no', 'duedate')
    success_url = reverse_lazy('hoge')

提示

HttpResponse/ render / redirectの違い
こちらの記事がわかりやすかったです。

redirectやreverse_lazyで、hogehogeapp/urls.pyで定義したnameを指定

hogehogeapp/urls.py的名称

from django.urls import path
from .views import hogefunc, hoge1func, hoge2func, HogeList, HogeDetail, HogeCreate, HogeDelete, HogeUpdate

urlpatterns = [
    path('hoge/', hogefunc, name='hoge'),
    path('hoge1/', hoge1func, name='hoge1'),
    path('hoge2/', hoge2func, name='hoge2'),
    path('list/', HogeList.as_view(), name='list'),
    path('detail/<int:pk>', HogeDetail.as_view(), name='detail'),
    path('create', HogeCreate.as_view(), name='create'),
    path('delete/<int:pk>', HogeDelete.as_view(), name='delete'),
    path('update/<int:pk>', HogeUpdate.as_view(), name='update'),
]

提示

    クラスベースの場合は、クラス名+**as_view()**をつける

末尾说明

考虑到知识和理解的不足,以及解释不够详细和应该更加关注的事项,我会根据学习的需要不断更新内容。

请提供更多上下文或者需求以便我更好地回答您的问题。

    • Django ドキュメント

 

    • Bootstrap

 

    くまのブログ – 【Django】render / redirect / HttpResponseなどの違い

最新版本的记录

    2023/01/11: 記事公開
bannerAds