• Django 学习小记


    发现一个Django入门的学习教程,有项目实战和源码,对入门学习很有帮助。代码有些小错误,自己调试下基本都调通了。在此做个总结。
    教程链接:
    http://c.biancheng.net/django/

    附上修改后的源码地址

    git@github.com:cyliu1991/BookStore.git

    • Django特点

    完善的文档:经过 10 余年的发展和完善,Django 官方提供了完善的在线文档,为开发者解决问题提供支持。
    集成 ORM 组件:Django 的 Model 层自带数据库 ORM 组件,为操作不同类型的数据库提供了统一的方式。
    URL 映射技术:Django 使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。
    后台管理系统:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。
    错误信息提示:在开发调试过程中如果出现运行异常,Django 可以提供非常完整的错误信息帮助开发者定位问题。

    • Django的MTV和MVC

    MVC:
    Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
    View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
    Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。

    用户通过浏览器向服务器发起 request 请求,Controller 层接受请求后,同时向 Model 层和 View 发送指令;Model层根据指令与数据库交互并选择相应业务数据,然后将数据发送给 Controller 层;View 接收到 Controller 的指令后,加载用户请求的页面,并将此页面发送给 Controller 层;Controller 层接收到 Model 层和 View 层的数据后,将它们组织成响应格式发送给浏览器,浏览器通过解析后把页面展示出来。

    Django 借鉴了经典的 MVC 模式,它也将交互的过程分为了 3 个层次,也就是 MTV 设计模式;
    Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
    Template:模板层(也叫表现层)具体来处理页面的显示;
    View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template 。


    用户通过浏览器对服务器发起 request 请求,服务器接收请求后,通过 View 的业务逻辑层进行分析,同时向 Model 层和 Template 层发送指令;
    Model层与数据库进行交互,将数据返回给View层;Template层接收到指令后,调用相应的模板,并返回给View层;View层接收到模板与数据后,首先对模板进行渲染(即将相应的数据赋值给模板),然后组织成响应格式返回给浏览器,浏览器进行解析后并最终呈现给用户。

     MTV 是 MVC 的一种细化,将原来 MVC 中的 V 层拿出来进行分离,视图的显示与如何显示交给 Template 层,而 View 层更专注于实现业务逻辑。其实在 Django 是有 Controller 层的,只不过它由框架本身来实现,所以我们不用关心它。Django 更关注于M、T 和 V。
     

    • ORM(Object Realtional Mapping)——对象关系映射

    ORM是一种基于关系型数据库的程序技术,允许使用类和对象对数据库进行操作。 ORM把类映射成数据库中的表,把类的一个实例对象映射成数据库中的数据行,把类的属性映射成表中的字段,通过对象的操作对应到数据库表的操作,实现了对象到 SQL、SQL 到对象转换过程。避免了直接使用 SQL 语句对数据库进行操作.

    Django 把表模型定义为 Model,继承自django.db.models中的 Model类。

    ORM 模块优势:
    实现数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异化。
    ORM不足:
    相比直接用 SQL 语句操作数据库会有性能损失。因为在映射的过程中 ORM 需要与 SQL 之间进行转换,根据对象的操作转换成 SQL 语句,根据查询结果转换成对象,所以在映射的过程存在性能损失。

    • django项目启动

    python manage.py runserver
    在浏览器地址栏输入 http://127.0.0.1:8000 进行访问

    • settings.py文件

    1) BASE_DIR
    它用于绑定当前项目 BookStore 所在的绝对路径
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    2) SECRET_KEY
    这个变量的本质是一个加密的盐,一般配合加密算法 Hash、MD5 一起使用。如用户密码的加密或者建立会话时用到的 sessionid 都需要用到 SECRET_KEY 。在实际的开发工作中,一般将它保存在系统的环境变量中以确保加密盐的安全。
    3) DEBUG
    用于配置 Django 项目的启用模式,有两种取值方式:
    DEBUG = True用于在开发环境中使用,属于调试模式,在项目的运行过程中会暴露一些错误信息以方便调试。
    DEBUG = False用于线上环境,表示不启用调试模式。
    4) ALLOWED_HOSTS
    用于配置能够访问当前站点的域名(IP地址),当 DEBUG = False 时,必须填写
    [],空列表,表示只有1217.0.0.1,localhost能访问本项目;
    ['*'],表示任何网络地址都能访问到当前项目;
    ['192.168.1.3', '192.168.3.3'] 表示只有当前两个主机能访问当前项目。
    5) INSTALLED_APPS
    这个参数是指当前项目中用来安装的应用(APP)的列表。Django 把默认自带的应用和自己编写的应用都必须在这个变量表中进行注册才能生效。
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',

        # 添加自定义APP
        'index',
        'user'
    ]
    6) MIDDLEWARE
    它用于注册中间件
    7) ROOT_URLCONF
    ROOT_URLCONF = 'BookStore.urls'
    它指定了当前项目的根 URL,是 Django 路由系统的入口。
    8) TEMPLATES
    它用于指定模板的配置信息,列表中每一元素都是一个字典。
    9) DATABASES
    它用于指定数据库配置信息,这里默认配置的是 Django 自带的 sqllite3 数据库
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'bookstoredb',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': '3306'
        }
    }
    10) AUTH_PASSWORD_VALIDATORS
    一个支持插拔的密码验证器,且可以一次性配置多个,Django 通过这些内置组件来避免用户设置的密码等级不足的问题。

    • Django初始化项目环境

    1.创建应用
    python manage.py startapp index
    2.添加应用到setting文件
    3.ORM定义项目数据表
    class UserInfo(models.Model): #创建用户信息表
        username=models.CharField(max_length=24,verbose_name='用户注册')
        password =models.CharField(max_length=24,verbose_name='密码')
    4. 进行数据迁移数据库迁移
    python manage.py makemigrations  #生成迁移文件
    python manag.py migrate  #执行迁移指令

    • render,HttpResponse,HttpResponseRedirect使用方法总结

    HttpResponse('书籍信息表为空,请录入!')  
    将字符串参数发给浏览器

    render(request, 'index/book_list.html', locals())  
    render(request, 'index/search_title.html', {'form': form})
    三个参数:一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。

    local()是Python中的一个内置函数,它可以将函数中的局部变量以字典的形式返回,即{'form': form}可以换成locals()
    局限性:适用于需要将所有的局部变量都进行返回的情况。但有些变量并不是我们所需要的。比如说在Django的视图函数中,我们可能会定义一些中间变量,这些中间变量是不需要被传递的,但是local()也会将它们装入字典中,此时最好自己定义字典。

    HttpResponseRedirect("/index/book_not_list")
    接受一个URL参数,表示让浏览器跳转去指定的URL.

  • 相关阅读:
    Spring Boot复用yaml文件
    基于深度学习的水果识别系统
    【LLM】Prompt tuning大模型微调实战
    [游戏开发][虚幻5]新建项目注意事项
    千亿贴息助科研,维视智造院校实验室建设攻略来了(四)!
    Python——爬取歌单(含源代码)
    25. HA Kubernetes cluster的高可用不是LB
    使用 MongoDB 构建 AI:Flagler Health 的 AI 旅程如何彻底改变患者护理
    Share| Membership in the American Society of Professionals in P
    零售数据分析模板鉴赏-品类销售结构报表
  • 原文地址:https://blog.csdn.net/cyliu_test/article/details/127553003