1、【django5笔记】 基础知识与逻辑

段愿仁长九 / 2024-08-10 / 原文

系统:  ubunt 22.04.4 LTS
 
1、确保python版本为3.10以上
 
  python3 -V
 
2、创建虚拟环境
 
  python3 -m venv test_venv
  cd test_venv
  source bin/activate # 进入虚环境
  pip -V # 确认虚环境下pip可用
 
3、安装django
 
  python -m pip install --upgrade pip
  pip install django
 
4、创建django项目
 
  django-admin help # 可以查看管理工具的用法
  djang-admin startproject test_project  # 创建django项目test_project
 
5、创建应用
 
  这将会创建一个基本的应用结构,包括models.py、views.py和urls.py等文件
    cd test_project
    django-admin startapp test_app
 
 
  # vim setting,与项目的安全和功能相关
 
    INSTALLED_APPS中添加 "test_app"
    DEBUG = TRUE # 开发环境可以使用调试模式,生产环境建议置为FALSE
    ALLOW_HOSTS = [] # 添加白名单
    MIDDLEWARE = […] # 默认中间件,可不调整
    TEMPLATES = […] # 模板
    DATABASES = {} # 数据库连接设置,包含指定引擎
    STATIC_URL = 'static/' # 静态资源指定
    补充释义:
      # 静态文件的 URL 路径 
      STATIC_URL = '/static/'   
      # “/static/”是域名的根路径下,为绝对路径;“static/” 为相对路径,
      # 例如:在某个特定的路径下(比如 http://example.com/somepath/)使用 {% static %} 模板标签,那么静态文件将会通过 http://example.com/somepath/static/ 来访问
      #
      # 静态文件的文件系统路径 
      STATICFILES_DIRS = [ 
        BASE_DIR / "static", # 这将对应项目根目录下的 static 文件夹 
        # 如果有其他应用特定的静态文件目录,也可以在这里添加 
        # 例如:BASE_DIR / "my_app" / "static",
      ] 
      # 当你运行 python manage.py collectstatic 命令时, 所有静态文件都会被收集到这个目录下 
      STATIC_ROOT = BASE_DIR / "staticfiles" # 用于生产环境
 
      DEFAULT_AUTO_FIELD = '…'
 
  # vim views.py # 配置视图
 
    将需要执行的操作渲染成UI界面
 
    使用步骤:
    1. 导入所需的模块和模型
    首先,你需要导入 Django 视图相关的模块(包含自定义模块)以及可能需要处理的数据模型(包含自定义模型)。
    # eg:
查看代码
 from django.http import HttpResponse
from .models import MyModel
    2. 定义视图函数:  
      2.1 定义一个简单的视图函数,它接受一个 HttpRequest 对象作为参数,并返回一个 HttpResponse 对象。
      # eg:
查看代码
def my_view(request):
    # 视图逻辑
    return HttpResponse("Hello, world!")
      2.2 通常,你会使用 render 函数来渲染一个模板,并将上下文数据传递给它。
 
      # eg:  
查看代码
from django.shortcuts import render


def my_view(request):
    context = {'message': 'Hello, world!'}
    return render(request, 'my_template.html', context)

# 这里,my_template.html 是模板的文件名,context 是一个字典,包含了传递给模板的数据。
      2.3 如果你的视图需要处理表单数据,你可以这样做:
 
      # eg:
      
查看代码
from django.shortcuts import render, redirect


def my_form_view(request):
    if request.method == 'POST':
        # 处理表单数据
        form = MyForm(request.POST)
        if form.is_valid():
            # 处理表单数据
            form.save()
            return redirect('success_url')
    else:
        form = MyForm()
    return render(request, 'form_template.html', {'form': form})
      2.4 除了基于函数的视图,Django 还支持基于类的视图。
 
      # eg:
查看代码
 from django.views.generic import ListView, DetailView

class MyListView(ListView):
    model = MyModel
    template_name = 'my_list_template.html'

class MyDetailView(DetailView):
    model = MyModel
    template_name = 'my_detail_template.html'
 
      2.5 示例
 
      # eg:
查看代码
 from django.shortcuts import render, HttpResponse

def index(request):
    return HttpResponse("Welcome to the index page.")

def about(request):
    context = {'about_us': 'We are a Django tutorial website.'}
    return render(request, 'about.html', context)
 
  # vim urls.py  配置应用程序的URL路由,这决定了URL会指向哪个视图
 
    将视图与URL进行绑定,实现UI交互
 
    使用步骤:
 
    在 urls.py 文件中为你的视图定义 URL 模式
 
查看代码
 from django.urls import path
from . import views

urlpatterns = [
    path('my_view/', views.my_view, name='my_view'),
   # 参数分别为: 'URL',  '视图函数',  '视图名(即路由的最末端的字段)'
    # ... 其他 URL 模式
]
 
  # vim models.py  用于设置应用的模型
 
    使用步骤:
 
    1.定义模型
 
    每个模型都是 django.db.models.Model 的一个子类。每个模型类都代表数据库中的一个表
 
    # eg:
查看代码
 from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

class Book(models.Model):
    title = models.CharField(max_length=200)
    authors = models.ManyToManyField(Author)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13)
    # 补充字段类型:
 
    Django 提供了一系列字段类型,用于定义模型中的不同类型的字段:
    • CharField: 字符串字段。
    • IntegerField: 整数字段。
    • DateField: 日期字段。
    • DateTimeField: 日期和时间字段。
    • ForeignKey: 外键,用于定义多对一关系。
    • ManyToManyField: 多对多关系。
    • BooleanField: 布尔字段。
    ...
 
    # 字段选项:
 
    每个字段都可以接受一组选项,例如:
    • max_length: 字段的最大长度。
    • null: 是否允许为空。
    • blank: 是否允许空白。
    • default: 默认值
 
    2. 元数据选项
 
      在模型类中,你可以定义 Meta 内部类,用于设置模型级别的元数据:
 
# eg:
查看代码
 class Book(models.Model):
   # 字段定义...
   class Meta:
       db_table = 'my_books'  # 指定数据库表名
       ordering = ['title']  # 指定默认排序字段
 
    3.模型方法
 
      可以在模型中定义自定义方法来执行与模型相关的操作:
 
      # eg:
查看代码
 class Author(models.Model):
   # 字段定义...

   def get_books(self):
      return self.book_set.all()  # 获取所有相关书籍
      每定义一个模型后,都需要生成迁移文件:
 
        python manage.py makemigrations  # 生成迁移文件:  新增模型后、启动应用前必须步骤
 
      然后运行迁移:
 
        python manage.py migrate  # 启动应用前必须步骤
 
 
6、运行应用迁移
 
  启动应用前确保数据表已经创建,需要运行以下命令迁移
 
    python manage.py migrate
 
7、创建用户
 
  python manage.py createuser  # 按以下提示输入账号,及绑定邮箱(邮箱可随意书写)
 
    # user:
    # email:
    # passwd:
    # entry passwd:
 
8、启动服务
 
  python manage.py runserver  # 默认8000端口,如需更换端口可另外采用nginx进行监听端口