zoukankan      html  css  js  c++  java
  • 笔记5:Django知识一

    Django

    1 MVC

    MVC的核心思想就是解耦。

    1559138019832

    2 Django介绍

    2.1 MVT

    Django遵循MVC思想,其称为MVT。其中:

    • M: Model模型:和MVC中的M相同和数据库交互
    • V:View视图,和MVC中的C相同,接收请求并处理,与M和T交互,返回应答
    • T:Template模板,和MVC中的V功能相同,产生HTML

    1559138277822

    解决python安装包依赖问题

    1559139008305

    在虚拟环境里面配置,减少依赖。

    Django项目创建

    1559139501282

    • 项目结构

    1559139626118

    • 创建应用 C:UsersadminDesktopncDome est1>django-admin startapp booktest

    1559139813409

    1559140138434

    • 启动服务器

    1559142881991

    • 添加app

    1559141953184

    2.2 ORM框架

    1559142294439

    ORM模型类生产表

    • 1 设计testbook app中的model.py

    1559143745239

    • 2 生成迁移文件

    1559143598381

    1559143956503

    • 3 执行迁移生成表

    1559144008478

    1559144107935

    sqlite3是一个小型数据库,经常使用在手机登移动端

    • 通过模型操作数据表。操作sqlite3
     
     
     
    xxxxxxxxxx
     
     
     
     
    C:Usersadmin>cd DesktopncDome	est1
    C:UsersadminDesktopncDome	est1>python manage.py shell
    In [3]: from booktest.models import BookInfo
    In [6]: from datetime import date
    In [4]: b=BookInfo()
    # 插入
    In [5]: b.btitle = '天龙八部'
    In [9]: b.bpub_date = date(1990,1,1)
    In [10]: b.save()
    # 查找
    In [14]: b2=BookInfo.objects.get(id=1)
    In [15]: type(b2)
    Out[15]: booktest.models.BookInfo
    In [16]: b2.btitle
    Out[16]: '天龙八部'
    # 更新
    In [17]: b2.btitle ='笑傲江湖'
    In [18]: b2.save()
    In [19]: b2.btitle
    Out[19]: '笑傲江湖'
    #删除
    In [23]: b2.delete()
     

    2.3 模型M:数据库交互

    • 模型与模型关系

    1559232526545

    生成迁移文件

    1559232582029

    生成迁移表

    1559232615290

    1559232696219

    1559232830466

    1559232902886

    • Django操作后台管理

    (1)本地化语言与时间

    1559233086302

    (2)创建管理员

    1559233147460

    (3)启动服务器

    1559233206207

    (4)浏览器访问

    1559233262373

    (5)注册模型类

    1559233296822

    1559233405264

    1559233729525

    1559233420800

    (6)列表文本显示

    1559233550047

    1559233566898

    (7)自定义管理页面

    1559488741646

    1559488845141

    2.4 视图V:V与M或者T交互

    • 视图使用:当视图与T交互时候,首先浏览器地址中127.0.0.1index。找到项目第三步中的url中的urlpatterns中查找,与^ 一样,逐渐往下匹配。找到booktest.urls。然后跳到app中的booktest中的urls(第二步)继续匹配。对应的是一个视图views.index,就会跳到视图views.py匹配,即第一步

    (1)编写view代码,定义视图函数,返回浏览器的内容

    1559489906689

    (2)创建urls.py:配置url路由,注意严格匹配开头结尾。地址视图都在这里直接匹配

    1559490135125

    1559490288469

    1559490364451

    (3) 项目的url文件配置,包含对应的app中的视图

    1559489545206

    • ur与视图匹配过程

      1559490527800l

    2.5 T:Template模板

    (1)根项目下创建模板templates文件夹

    1559491898481

    (2)配置模板目录

    • 项目绝对路径,查看即可

    1559490928361

    • 设置目录文件路径

    1559490983465

    • 配置模板文件,每个app下创建一个模板文件名如booktest

    1559492103769

    这里面的模板文件为html,而模板中不仅仅为html。其中支持变量,变量使用两个花括号,;里面是view.py中设置的字典键名。

    • 模板中的遍历

    1559492448818

    (3)使用模板文件

    1559491107254

    • 模板渲染:产生标准的html

    1559491434322

    • 封装以上步骤

    1559491544675

    注意:使用模板文件中需要以上四个步骤,对以上四步进行封装为my_render遍历高效执行。幸运的是django已经帮我们封装好了这个方法为render。其中第一个参数为request,第二个是模板路径,第三个参数是变量字典,没有变量则为空

    1559491709284

    1559491608434

    1559492307170

    • 显示结果

    1559492417381

    2.6 MVT综合案例

    (1)启动项目解决端口号占用,指定端口号

    1559492591951

    (2)案例介绍

    1559492675244

    1559492716985

    (3)视图编写,先导入模型model类,查找MongoDB数据库的表信息

    1559492850511

    1559492946155

    (4)配置url,记得配置主项目下的urls.py,这个文件一次配置多次使用

    1559493017734

    (5)创建模板文件

    1559493253565

    (6)显示图书信息,主页信息

    1559493198553

    (7) 在视图里面编写图书管理的详细信息

    1559493402099

    1559493480687

    (8) 设置URL地址以及传参

    1559493621636

    Django在页面间传参的原理是,在页面url配置时候通过括号里面的组进行传参,后面视图会自动解析组内容进行参数填充。多个参数多个组

    (8)创建子页面信息

    1559493816342

    2.7 Django使用MySQL

    (1)创建新的项目:django-admin startproject tets2

    (2) 创建app: django-admin startapp booktest

    (3) setting.py中的INSTALLED_APPS注册应用booktest

    (4) setting.py中的DATABASES中配置数据库

     
     
     
    xxxxxxxxxx
     
     
     
     
    DATABASES = {
        'default': {
            # 'ENGINE': 'django.db.backends.sqlite3',
            # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'bj18',
            'USER':'root',
            'PASSWORD':'admin',
            'HOST':'127.0.0.1',
            'PORT':3306,
        }
    }
     

    (5) 预先安装pip install pymysql,之后在test2中需要加两句话:

    1559566868521

    1559566639759

    (6) 根目录下启动服务: python manage.py runserver

    (7) 迁移表:python manage.py makemigrations

    (8) mysql数据库同步表:python manage.py migrate

    1560179674829

    (9) 编写views

     
     
     
    xxxxxxxxxx
     
     
     
     
    from django.shortcuts import render
    from booktest.models import BookInfo
    # Create your views here.
    def index(request):
        # 1 查询所有信息
        books = BookInfo.objects.all()
        # 2 使用模板
        return render(request,'booktest/index.html',{'books':books})
     

    (10) 设置模板目录DIRS

     
     
     
    xxxxxxxxxx
     
     
     
     
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates')],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
     

    (11) 在templates下新建booktest文件夹,然后创建html

    (12) 配置urls

     
     
     
    xxxxxxxxxx
     
     
     
     
    from django.contrib import admin
    from django.urls import path,include
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('booktest/', include('booktest.urls') )
    ]
     

    booktest的urls

     
     
     
    xxxxxxxxxx
     
     
     
     
    from django.urls import path,include
    from booktest import views
    urlpatterns = [
        path('',views.index,name='index')
    ]
     

    重定向

     
     
     
    xxxxxxxxxx
     
     
     
     
    from django.shortcuts import render,redirect
    def create(request):
        b = BookInfo()
        b.btitle = '流星蝴蝶剑'
        b.bpub_date= datetime.date(1990,1,1)
        b.save()
        # return HttpResponse('ok')
        return redirect('index')
     

    (13)mysql日志文件

    1560266978298

    (14)模型-模型关系:1:1,1:多,多:多

    1560267866713

    两个类之间有多对多的关系,ManyToManyField定义在哪个类里面都可以

    1560267754216

    (15)模型-关联查询

    1560268121596

    1560268260720

    (16)管理器对象

    1560268710592

    1560268993164

    1560269246685

    1560269420407

    (17)元选项:不会因为app改变影响模型类,然后重新做下迁移

    1560269741567

    模型类对应的表名不依赖于应用的名字

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# 播放器控件的常用方法
    在 C# 中使用文件名启动应用程序
    备份和恢复Android手机的NAND分区
    刷Recovery的方法
    WPF RadioButton的探究,为啥选中一个其他都自动不选中了呢?
    WPF大牛Josh Smith 转投 iOS 的怀抱
    终端服务的剪贴板的缺陷,导致WPF调用Clipboard.SetText() 失败
    用df命令查看分区情况
    WPF与输入法冲突研究之二:TextInput事件的BUG?
  • 原文地址:https://www.cnblogs.com/baiboy/p/11013221.html
Copyright © 2011-2022 走看看