51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1805|回复: 1
打印 上一主题 下一主题

Django 入门(个人学习笔记,持续更新)

[复制链接]
  • TA的每日心情
    无聊
    2024-9-19 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2019-1-29 14:58:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    MVC
    大部分开发语言中都有MVC框架
    MVC框架的核心思想是:解耦
    降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用
    m表示model,主要用于对数据库层的封装
    v表示view,用于向用户展示结果
    c表示controller,是核心,用于处理请求、获取数据、返回结果

    MVT
    Django是一款python的web开发框架
    与MVC有所不同,属于MVT框架
    m表示model,负责与数据库交互
    v表示view,是核心,负责接收请求、获取数据、返回结果
    t表示template,负责呈现内容到浏览器


    1.1搭建开发环境
    我直接使用的是pycharm professional 也就是专业版,里面直接选择Django项目,会自动帮你安装虚拟python环境用来进行开发,按alt+F12可以进入Terminal




    创建项目
    命令
    1. django-admin startproject test1
    复制代码

    在上图的terminal打开输入即可
    进入test1目录,目录结构如下图:



    目录说明

    • manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互
    • 内层的目录:项目的真正的Python包
    • init .py:一个空文件,它告诉Python这个目录应该被看做一个Python包
    • settings.py:项目的配置
    • urls.py:项目的URL声明
    • wsgi.py:项目与WSGI兼容的Web服务器入口

    1.2设计模式

    设计介绍

    本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄

    图书表结构设计:

    • 表名:BookInfo
    • 图书名称:btitle
    • 图书发布时间:bpub_date

    英雄表结构设计:

    • 表名:HeroInfo
    • 英雄姓名:hname
    • 英雄性别:hgender
    • 英雄简介:hcontent
    • 所属图书:hbook

    图书-英雄的关系为一对多


    数据库配置

    在settings.py文件中,通过DATABASES项进行数据库设置

    django支持的数据库包括:sqlite、mysql等主流数据库

    Django默认使用SQLite数据库


    创建应用

    在一个项目中可以创建一到多个应用,每个应用进行一种业务处理

    创建应用的命令:

    1. python manage.py startapp booktest
    复制代码

    应用的目录结构如下图,红色的是后面出现的文件,其他的是刚刚创建时候就存在的:



    定义模型类

    有一个数据表,就有一个模型类与之对应

    打开models.py文件,定义模型类

    引入包from django.db import models

    模型类继承自models.Model类

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

    当输出对象时,会调用对象的str方法

    1. from django.db import models

    2. # Create your models here.
    3. class BookInfo(models.Model):
    4.     btitle = models.CharField(max_length=20)
    5.     bpub_date = models.DateTimeField()
    6.     def ___str__(self):
    7.         return "%d" % self.pk

    8. class HeroInfo(models.Model):
    9.     hname = models.CharField(max_length=20)
    10.     hgender = models.BooleanField()
    11.     hcontent = models.CharField(max_length=100)
    12.     hBook = models.ForeignKey('BookInfo',on_delete=models.CASCADE,)
    13.     def __str__(self):
    14.         return "%d" % self.pk
    复制代码

    需要注意的是,在Django2.0中,与之前的1.8不同,models下的ForeignKey()之前的版本是这样写的

    1. hBook = models.ForeignKey('BookInfo')
    复制代码

    这代码在Django2.0下运行会提示这样的错误:

    1. ypeError: __init__() missing 1 required positional argument: 'on_delete'
    复制代码

    所以在Django2.0中应该:

    1. hBook = models.ForeignKey('BookInfo',on_delete=models.CASCADE,)
    复制代码

    其中,on update cascade 和on delete cascade 作用区别:

    这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。update 则是主键表中被参考字段的值更新,delete是指在主键表中删除一条记录:

    on update 和 on delete 后面可以跟的词语有四个

    no action , set null , set default ,cascade

    no action 表示 不做任何操作,

    set null 表示在外键表中将相应字段设置为null

    set default 表示设置为默认值

    cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除


    生成数据表

    激活模型:编辑settings.py文件,将booktest应用加入到installed_apps



    以后项目中新的应用也要添加这里中
    生成迁移文件:根据模型类生成sql语句
    1. python manage.py makemigrations
    复制代码

    迁移文件被生成到应用的migrations目录
    1. python manage.py migrate
    复制代码

    测试数据操作

    进入python shell,进行简单的模型API练习

    1. python manage.py shell
    复制代码

    进入shell后提示如下:


    引入需要的包:

    1. from booktest.models import BookInfo,HeroInfo
    2. from django.utils import timezone
    3. from datetime import *
    复制代码

    查询所有图书信息:

    1. BookInfo.objects.all()
    复制代码

    新建图书信息:

    1. b = BookInfo()
    2. b.btitle="射雕英雄传"
    3. b.bpub_date=datetime(year=1990,month=1,day=10)
    4. b.save()
    复制代码

    查找图书信息:

    1. b=BookInfo.objects.get(pk=1)
    复制代码

    输出图书信息:

    1. b
    2. b.id
    3. b.btitle
    复制代码

    修改图书信息:

    1. b.btitle=u"天龙八部"
    2. b.save()
    复制代码

    删除图书信息:

    1. b.delete()
    复制代码

    1.3管理站点
    服务器

    运行如下命令可以开启服务器

    1. python manage.py runserver ip:port
    复制代码

    可以不写ip,默认端口为8000
    这是一个纯python编写的轻量级web服务器,仅在开发阶段使用
    服务器成功启动后,提示如下信息



    默认端口是8000,可以修改端口

    1. python manage.py runserver 8080
    复制代码

    打开浏览器,输入网址“127.0.0.1:8000”可以打开默认页面

    如果修改文件不需要重启服务器,如果增删文件需要重启服务器

    通过ctrl+c停止服务器


    管理操作

    站点分为“内容发布”和“公共访问”两部分

    “内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。为此,Django会根据定义的模型类完全自动地生成管理模块


    使用django的管理

    创建一个管理员用户

    python manage.py createsuperuser,按提示输入用户名、邮箱、密码

    启动服务器,通过“127.0.0.1:8000/admin”访问,输入上面创建的用户名、密码完成登录

    进入管理站点,默认可以对groups、users进行管理

    管理界面本地化


    编辑settings.py文件,设置编码、时区

    LANGUAGE_CODE = 'zh-Hans'

    TIME_ZONE = 'Asia/Shanghai'

    向admin注册booktest的模型


    打开booktest/admin.py文件,注册模型

    from django.contrib import admin

    from models import BookInfo

    admin.site.register(BookInfo)

    刷新管理页面,可以对BookInfo的数据进行增删改查操作

    问题:如果在str方法中返回中文,在修改和添加时会报ascii的错误

    解决:在str()方法中,将字符串末尾添加“.encode(‘utf-8’)”

    自定义管理页面


    Django提供了admin.ModelAdmin类

    通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式

    class QuestionAdmin(admin.ModelAdmin):

    ...

    admin.site.register(Question, QuestionAdmin)

    列表页属性


    list_display:显示字段,可以点击列头进行排序

    list_display = ['pk', 'btitle', 'bpub_date']

    list_filter:过滤字段,过滤框会出现在右侧

    list_filter = ['btitle']

    search_fields:搜索字段,搜索框会出现在上侧

    search_fields = ['btitle']

    list_per_page:分页,分页框会出现在下侧

    list_per_page = 10

    添加、修改页属性


    fields:属性的先后顺序

    fields = ['bpub_date', 'btitle']

    fieldsets:属性分组

    fieldsets = [

    ('basic',{'fields': ['btitle']}),

    ('more', {'fields': ['bpub_date']}),

    ]

    关联对象


    对于HeroInfo模型类,有两种注册方式


    方式一:与BookInfo模型类相同

    方式二:关联注册

    按照BookInfor的注册方式完成HeroInfo的注册


    接下来实现关联注册

    1. from django.contrib import admin
    2. from models import BookInfo,HeroInfo

    3. class HeroInfoInline(admin.StackedInline):
    4.     model = HeroInfo
    5.     extra = 2

    6. class BookInfoAdmin(admin.ModelAdmin):
    7.     inlines = [HeroInfoInline]

    8. admin.site.register(BookInfo, BookInfoAdmin)
    复制代码




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 14:51 , Processed in 0.067366 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表