Django 快速入门

安装Django

  • 版本说明:
Django版本Python 版本
1.8.x2.7, 3.2, 3.3, 3.4, 3.5
1.9.x, 1.10.x2.7, 3.4, 3.5
1.11.x2.7, 3.4, 3.5, 3.6
2.0.x3.4, 3.5, 3.6
2.1.x3.5, 3.6, 3.7

​ - 示例: pip3 install Django==2.0.4

创建项目

  1. 在合适位置创建一个目录
  2. 打开终端进入新建的目录下
  3. 输入 django-admin startproject ProjectName
  4. 完成后查看当前项目目录
    • 项目文件说明
      • manage.py : 一个命令行工具,可以使我们用多种方式对Django项目交互
      • ProjectName:
        • _init_.py : 一个空文件,告诉python这个目录是一个包
        • settings.py : 项目的配置文件
        • urls.py : 项目的URL声明
        • Wsgi.py : 项目与WSGI兼容的Web服务器入口

基本操作

  1. 设计表结构

    设计表结构

    • 创建数据库:

      #进入数据库
      mysql -u root -p
      #创建项目数据库
      create database itmeng;
      

  2. 配置数据库

    • 注意: Django默认使用的是SQLite数据库

    • 配置MySQL

      • python3.x安装的是PyMySQL

      • 在项目文件夹下_init_.py文件中写入两行代码:

        import pymysql
        pymysql.install_as_MySQLdb()
        
    • 在Settings.py文件中, 通过DATABASES选项进行数据库配置:

      格式:
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.数据库类型',
              'NAME': "数据库名",
              'USER': '用户名(数据库的),
              'PASSWORD': '数据库密码',
              'HOST': '服务器地址',
              'PORT': '端口',
          }
      }
      

      示例:

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': "itmeng",
              'USER': 'root',
              'PASSWORD': 'mengfei',
              'HOST': 'localhost',
              'PORT': '3306',
          }
      }
      
  3. 创建应用

    • 说明 : 在一个项目中可以创建多个应用, 每个应用各进行一种业务处理
    • 打开黑屏终端, 进入项目文件夹下的project目录
    • 执行python3 manage.py startapp myApp, myApp是应用名
    • myApp目录说明
  4. 激活应用

    • 在settings.py文件中, 将myApp应用加入到INSTALLED_APPS选项中(在列表中加入应用名即可)

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'myApp'
      ]
      
  5. 定义模型:

    • 概述 : 有一个数据表, 就对应有一个模型

    • 在models.py 文件中定义模型

      • 引入from django.db import models

      • 模型类要继承models.Model类 (模型实际上就是一个类)

      • 创建模型类

        from django.db import models
        
        # Create your models here.
        # 创建模型(对应数据库中的 -- 班级表)
        # 类属性对应表里的字段
        # models.XXX(设置数据类型)
        class Grades(models.Model):
            gname = models.CharField(max_length=20)
            gdate = models.DateTimeField()
            ggirlnum = models.IntegerField()
            gboynum = models.IntegerField()
            isDelete = models.BooleanField(default=False)
        
        # 学生表
        class Students(models.Model):
            sname = models.CharField(max_length=20)
            sgender = models.BooleanField(default=True)
            sage = models.IntegerField()
            scontend = models.CharField(max_length=20)
            isDelete = models.BooleanField(default=False)
            # 关联外键
            sgrade = models.ForeignKey("Grades")
        

        说明: 不需要定义主键, 在生成时自动添加主键, 并且值为自增

  6. 在数据库中生成数据表:

    • 生成迁移文件

      • project目录下执行python3 manage.py makemigrations 生成迁移文件
      • 会在 migrations目录下生成一个迁移文件, 此时数据库中还没有生成数据表
    • 执行迁移

      • 执行python3 manage.py migrate生成数据表, 终端会反馈ok代表成功

        相当于执行了SQL语句, 自动创建数据表

  7. 测试数据操作

    • 进入python shell : 执行python3 manag shell

    • 引入包 :

      from myApp.models import Grades,Students
      from django.utils import timezone
      from datetime import *
      
    • 查询所有数据 Grades.objects.all() == 类名.objects.all

    • 添加数据: (本质就是创建一个模型类的实例对象)

      from myApp.models import Grades,Students
      from django.utils import timezone
      from datetime import *
      grade = Grades()
      grade.gname = "py1806"
      grade.gdate = datetime(year=2018, month=9, day=10)
      grade.ggirlnum = 4
      grade.gboynum = 46
      
  8. 查看某个对象, 比如: 查看python05

    # 类名.objects.get(条件)
    Grades.objects.get(pk=2)
    
  9. 修改数据

    # 模型对象.属性 = 新值    相当于修改实例对象属性,修改完需要使用'save()'方法提交
    grade2.gboynum = 45
    grade2.save()
    
  10. 删除数据

# 物理删除方法,模型对象.delete() , 相当于直接删除模型的实例对象(慎用)
grade2.delete()

# 逻辑删除直接改变实例对象的isDelete属性
grade2.isDelete = True
  1. 关联模型对象
# 学生1
stu1.sname = "meng"
stu1.sage = 18
stu1.sconted = "Hello World"
stu1.sgrade = grade1   # 直接把外键属性等于需要关联的对象
stu1.save()
 # 学生2
 stu2.sname = "fei"
stu2.sage = 19
stu2.sgenter = True
stu2.sconted = "Hello Java"
stu2.sgrade = grade1   # 直接把外键属性等于需要关联的对象
stu2.save()

获得关联对象的集合:

需求: 获取python1806班级的所有学生
grade1.students_set.all()

动态创建一个学生:

需求: 使用python1806对象创建一个学生(直接添加到数据库中)
stu3 = grade1.students_set(sname='yan', sage=20, sconted='Hello C')

  1. 启动服务器
# 格式: python3 manage.py runserver ip:port
# ip 可以不写, 默认127.0.0.1
# 端口号也可以不写, 默认8000
# 说明: 这是一个纯python写的轻量级web服务器, 仅仅在开发测试中使用
# 如下:
python3 manage.py runserver 127.0.0.1:8000
# 打开游览器测试: http://127.0.0.1:8000
  1. Admin 站点管理
    1. 内容发布: 负责 增, 删, 改
    2. 公告访问
    3. 配置Admin应用: 在settings.pyINSTALLED_APPS中添加’django.contrib.admin’
    4. 创建管理员用户: 执行python3 manage.py createsuperuser, 输入账号/邮箱/密码
    5. 站点汉化: 修改settings.py文件, LANGUAGE_CODE = 'zh-Hans'&TIME_ZONE = 'Asia/Shanghai'
  2. 管理数据表
    1. 修改my-appadmin.py
      # 引入模型
      from .models import Grades, Students
      # 注册
      admin.site.register(Grades)
      admin.site.register(Students)
      
    2. 自定义管理页面
      属性讲解
      示例:
    class GradesAdmin(admin.ModelAdmin):
        # 列表页属性
        list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete']
        list_filter = ['gname']
        search_fields = ['gname']
        list_per_page = 5   # 分页, 每5条一页
    
        # 添加修改页属性
        # fields = ['ggirlnum','gboynum','gname','gdate','isDelete']
        fieldsets = [
            ('num',{'fields':['ggirlnum','gboynum']}),
            ('base',{'fields':['gname','gdate','isDelete']})
        ]
    # 注册
    admin.site.register(Grades,GradesAdmin)
    admin.site.register(Students)
    
    效果图:
    效果
  3. 关联对象

    需求: 在添加班级的时候, 可以直接添加两个学生

    class StudentsInfo(admin.TabularInline):  
    	# StackedInline和TabularInline 用法一样,效果不同
        model = Students
        extra = 2
    class GradesAdmin(admin.ModelAdmin):
    	inlines = [StudentsInfo]
    
  4. 布尔值显示问题
    class StudentsAdmin(admin.ModelAdmin):
        def gender(self):
            if self.sgender:
                return 'boy'
            else:
                return 'girl'
        # 设置页面列的名称
        gender.short_description = 'Sex'
        # 直接传进gender函数
        list_display = [ 'pk','sname', 'sage',gender,'sconted','sgrade','isDelete']
        list_per_page = 10
    
  5. 执行动作位置
    # 执行动作问题
    actions_on_top = False
    actions_on_bottom = True
    
  6. 使用装饰器完成注册
    # 使用装饰器注册
    @admin.register(Grades)
    class GradesAdmin(admin.ModelAdmin):
        inlines = [StudentsInfo]
        # 列表页属性
        list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete']
        list_filter = ['gname']
        search_fields = ['gname']
        list_per_page = 5   # 分页, 每5条一页
        # 添加修改页属性
        # fields = ['ggirlnum','gboynum','gname','gdate','isDelete']
        fieldsets = [
            ('num', {'fields': ['ggirlnum', 'gboynum']}),
            ('base', {'fields': ['gname', 'gdate', 'isDelete']})
    

视图的基本使用

  1. 概述:
    • 在django中, 视图对web请求进行回应
    • 视图就是一个python函数, 在views.py文件中定义

未完待续 … …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值