Django快速上手

1. 安装Django

Django 4.x的版本只支持MySQL8及以上的版本了。如果mysql版本比较老,需要使用老版本的django。此处指定django版本为3.2.20

shell 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==3.2.20

2. 创建项目

  1. 创建项目

    1. 在指定目录使用命令行创建项目 django01

      shell 复制代码
      django-admin startproject django01
  2. 创建app

    1. 在项目内manage.py的同级目录使用命令行创建 app01

      shell 复制代码
      python manage.py startapp app01
  3. 注册app

    1. 查看 app01 --> apps.py

      python 复制代码
      from django.apps import AppConfig
      
      
      class App01Config(AppConfig):
          default_auto_field = 'django.db.models.BigAutoField'
          name = 'app01'
    2. 在 django01 --> settings.py 的INSTALLED_APPS中注册app,增加app01

      python 复制代码
      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'app01.apps.App01Config'	# 对应app01的路径
      ]
  4. 编写url和视图函数的映射关系(路由)

    1. 在django01 --> urls.py 中新增path,对应到app01 views.py的路径

      python 复制代码
      from django.contrib import admin
      from django.urls import path
      
      from app01 import views
      
      urlpatterns = [
          # path('admin/', admin.site.urls),
      
          path('index/', views.index),
      ]
    2. 在 app01 --> views.py中创建函数 index

      python 复制代码
      from django.http import HttpResponse
      from django.shortcuts import render
      
      # Create your views here.
      
      def index(request):
          return HttpResponse("HelloWorld")
  5. 启动项目

    1. 方法一:命令行启动

      shell 复制代码
      python manage.py runserver
    2. 方法二:pycharm启动

  6. web访问测试 http://localhost:8000/index/

3. orm操作MySQL

  1. 安装mysqlclient

    shell 复制代码
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mysqlclient
  2. 连接数据库

    在django01 --> settings.py 中配置

    python 复制代码
    # Database
    # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
    
    # DATABASES = {
    #     'default': {
    #         'ENGINE': 'django.db.backends.sqlite3',
    #         'NAME': BASE_DIR / 'db.sqlite3',
    #     }
    # }
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
            'NAME': 'gotest',   # 库名
            'USER': 'root',
            'PASSWORD': 'uGS7jx9sYU7nt0c',
            'HOST': '192.168.7.228',
            'PORT': 3306,
        }
    }
  3. 操作表

    1. 创建表

      • 在app01 --> models.py 中创建类 UserInfo (建表的时候表名为app01_userinfo, 会自动添加主键id)

        python 复制代码
        from django.db import models
        
        class UserInfo(models.Model):
            name = models.CharField(max_length=32)
            password = models.CharField(max_length=64)
            age = models.IntegerField()
      • manage.py 同级目录执行命令建表

        shell 复制代码
        python manage.py makemigrations
        python manage.py migrate
    2. 修改表

      • 删除列:将对象内的字段注释或者删掉,然后执行建表命令

      • 新增列:由于已存在的列中可能有数据,所以新增列必须执行对应的数据。然后再执行建表命令

        python 复制代码
        # 列默认值为2
        data1 = models.IntegerField(default=2)
        # 默认值为空
        data2 = models.IntegerField(null=True, blank=True)
    3. CURD

      python 复制代码
      form app01 import models
      
      # 新增
      models.UserInfo.objects.create(name="小赵", password="123", age=20)
      models.UserInfo.objects.create(name="小钱", password="123", age=20)
      models.UserInfo.objects.create(name="小孙", password="123", age=20)
      
      # 删除
      models.UserInfo.objects.filter(id=3).delete()
      
      # 查询
      # 查所有
      # data_list 是QuerySet类型
      data_list = models.UserInfo.objects.all()
      for obj in data_list:
          print(f"{obj.name}, {obj.password}, {obj.age}")
      
      # 查一行
      obj = models.UserInfo.objects.filter(id=1).first()
      print(obj.id)
      
      # 改
      models.UserInfo.objects.filter(id=1).update(password="999")
    4. 外键

      使用django自动创建表时,如果是外键,在对象中需要做特殊处理

      python 复制代码
      """
      1. to 表示与哪张表关联
      2. to_field 表示关联的字段
      3. 返回参数是depart,创建表时,外键字段会定义为depart_id
      4. 需要配置on_delete属性:当另一张表被删除时,对应有两种处理(级联删除、置空)
      """
      # 级联删除
      depart = models.ForeignKey(to="Department", to_fields="id", on_delete=models.CASCADE)
      # 置空
      # depart = models.ForeignKey(to="Department", to_fields="id", null=True, blank=True, on_delete=models.SET_NULL)
    5. choices约束

      python 复制代码
      """
      1. verbose_name: 字段的备注
      2. SmallIntegerField: 对应数据表的tinyint
      3. 配置choices后,数据表存储的值是1 和 2
      """
      gender_choices = (
          (1, "男"),
          (2, "女"),
      )
      gennder = models.SmallIntegerField(verbose_name="性别", choices=gender_choices)
相关推荐
运器1239 分钟前
【一起来学AI大模型】PyTorch DataLoader 实战指南
大数据·人工智能·pytorch·python·深度学习·ai·ai编程
音元系统12 分钟前
Copilot 在 VS Code 中的免费替代方案
python·github·copilot
超龄超能程序猿23 分钟前
(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
人工智能·python·机器学习·numpy·pandas·scipy
cooldream20092 小时前
Python 包管理新时代:深入了解 `uv` 的使用与实践
python·uv·包管理器
之歆2 小时前
Python-魔术方法-创建、初始化与销毁-hash-bool-可视化-运算符重载-容器和大小-可调用对象-上下文管理-反射-描述器-二分-学习笔记
笔记·python·学习
胖达不服输2 小时前
「日拱一码」025 机器学习——评价指标
人工智能·python·机器学习·评价指标
brave_zhao4 小时前
JavaBeanUtils javaBean转map, 实体类转map,实体集合转List<Map>
linux·windows·python
apihz5 小时前
通用图片搜索-搜狗源免费API接口使用指南
android·java·python·php·音视频
爱吃面条的猿5 小时前
pycharm中自动补全方法返回变量
ide·python·pycharm
倔强青铜三5 小时前
苦练Python第15天:Lambda函数——Python的匿名一行杀器
人工智能·python·面试