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)
相关推荐
测试1998几秒前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
love_and_hope几秒前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
海阔天空_201329 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
零意@37 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
思忖小下1 小时前
Python基础学习_01
python
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀1 小时前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆1 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
狂奔solar2 小时前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE2 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化