FXHao

个人站

欢迎来到我的小世界~哈哈哈~


Django框架的基本使用

Django框架基本使用

Django框架简单介绍

  • 框架

    一个框架就好比一个公司,每一个部门都有特定的职能,部门与部门相互配合才能让公司运转起来,而框架则是模块与模块相互配合来完成工作的

Django框架

  • 它遵循的是 MVT 的思想

    M: Model,模型,和数据库进行交互。

    V: View,视图,接收请求,进行处理,与M和T进行交互,返回应答。

    T: Template,模板,产生 html 页面。


虚拟环境的搭建

1.安装

  • 这个鬼虚拟环境弄得我要疯,可能是我的 ubuntu 系统有点问题,本来很简单的pip装就可以了,然后弄了半天,这里分享一个虚拟环境搭建的网站

    https://www.cnblogs.com/cwp-bg/p/7701231.html

2.使用

# 创建虚拟环境命令:
	mkvirtualenv 虚拟环境名
# 创建python3虚拟环境:
	mkvirtualenv -p python3 名字
# 进入虚拟环境工作:
	workon 虚拟环境名
# 查看机器上有多少个虚拟环境:
	workon 空格 + 两个tab键
# 退出虚拟环境:
	deactivate
# 删除虚拟环境:
	rmvirtualenv 虚拟环境名
# 虚拟环境下安装包的命令:
	pip install 包名
# 查看虚拟环境中安装了哪些python包:
	pip list
	pip freeze
# 安装django环境:
	pip install django==1.8.2

项目

1.创建Django项目

  • ​ 在虚拟环境下

    django-admin startproject 项目名
    

    可以先创建一个目录,在该目录下创建项目test1

manage.py 是项目管理文件,通过它管理项目。 与项目同名的目录,此处为 test1__init__ 是一个空文件,作用是这个目录test1可以被当作包使用。 settings.py 是项目的整体配置文件。 urls.py 是项目的 URL 配置文件。 wsgi.py 是项目与 WSGI 兼容的Web服务器入口

2.创建应用

  • 一个项目由很多个应用组成的,每一个应用完成一个功能模块。这里示例一下图书—人物的管理维护

    python manage.py startapp booktest  # 创建应用  在项目目录下创建
    

__init__.py 是一个空文件,表示当前目录 booktest 可以当作一个python包使用。 tests.py 文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做。 models.py 文件跟数据库操作相关。 views.py 文件跟接收浏览器请求,进行处理,返回页面相关。 admin.py 文件跟网站的后台管理相关。

3.应用注册

  • 应用创建成功后,需要注册才可以使用,也就是建立应用和项目之间的关联,在 test1/settings.pyINSTALLED_APPS 下添加应用的名称就可以完成安装。

  • 这时就可以用 Pycharm 之类的编辑软件打开项目,来编辑里面的内容

    这样就可以了~~~

4.启动项目

  • Django 为了能预览开发中的效果,它提供了一个轻量级的 web服务器,以下命令启动

    python manage.py runserver ip:端口
    python manage.py runserver   # 默认是127.0.0.1 端口:8000
    

    然后就可用浏览器访问了


开发

链接MySQL数据库

  • Django数据库默认使用的是 sqlite3 数据库,若要更换数据库,需手动去更改下settings.py的配置

  • 开发数据库流程:

    • 1.在models.py中定义模型类
    • 2.迁移
    • 3.通过类和对象完成数据增删改查操作

模型类

  • Django里面可以通过 对象 对数据表进行操作

1.定义类

  • models.py 文件中,继承 models.Model

    from django.db import models
    # 设计和表对应的类,模型类
    # 图书类
    class BookInfo(models.Model):
        '''图书模型类'''
        # 图书的名称,CharField说明是一个字符串,max_length指定字符串的最大长度
        btitle = models.CharField(max_length=20)
        # 出版日期,DateFields说明是一个日期类型
        bpud_data = models.DateField()
        # 这句话是因为后面查询时说 objects 找不到,有的就不会有这问题,可以先不写
        objects = models.Manager()  
      
    class HeroInfo(models.Model):
        """英雄人物模型类"""
        # 英雄名称
        hname = models.CharField(max_length=20)
        # 性别,布尔类型,默认男
        hgender = models.BooleanField(default=False)
        # 备注
        hcommnet = models.CharField(max_length=128)
        # 关系属性 hbook 建立图书类和英雄人物类之间的一对多关系
        hbook = models.ForeignKey('BookInfo')   
    

2.迁移

  • 生成迁移文件

    python manage.py makemigrations
    

    ​ 这玩意是根据上面的类生成的

  • 执行迁移生成表

    python manage.py migrate
    
    • 这句就是在数据库中生成对应的表,表名的格式:应用名_模型类名小写

要注意的是,新定义了模型类,都要重新 迁移 ,因为定义模型类,意味着数据库中的表要发生改变,所以得重新迁移


对数据库操作

  • 可以进入项目的 shell 里面测试相关的操作

    python manage.py shell
    
  • 一些简单的操作

    # 首先导入模型类:
    	from booktest.models import BookInfo,HeroInfo
      
    # 向booktest_bookinfo表中插入一条数据。
    	b = BookInfo() #定义一个BookInfo类的对象
    	b.btitle ='天龙八部' #定义b对象的属性并赋值
    	b.bpub_date = date(1990,10,11) 
    	b.save() #才会将数据保存进数据库
      
    # 查询出booktest_bookinfo表中id为1的数据。
    	b = BookInfo.objects.get(id=1) 
      
    # 在上一步的基础上改变b对应图书的出版日期。
    	b.bpub_date = date(1989,10,21)
    	b.save() #才会更新表格中的数据
      
    # 紧接上一步,删除b对应的图书的数据。
    	b.delete() 
      
    # 向booktest_heroInfo表中插入一条数据。
    	h = HeroInfo()
    	h.hname = '郭靖'
    	h.hgender = False
    	h.hcomment = ‘降龙十八掌’
    	b2 = BookInfo.objects.get(id=2)
    	h.hbook = b2  # 给关系属性赋值,英雄对象所属的图书对象
    	h.save() 
      
    # 查询图书表里面的所有内容。
    	BookInfo.objects.all()
    	HeroInfo.objects.all()
      
    # 查询出id为2的图书中所有英雄人物的信息。
    	b = BookInfo.objects.get(id=2)
    	b.heroinfo_set.all() # 查询出b图书中所有英雄人物的信息
    

视图

  • 服务器在收到这个请求之后,就一定对应着一个处理动作,这个处理动作就是帮我们产生页面内容并返回回来,这个过程是由 视图 来做的。
  • 对于 django 的设计框架 MVT ,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者。
  • 视图的使用步骤:
    • 1.定义视图函数
    • 2.配置URLconf

1.定义视图

  • 视图说道底就是一个就是一个Python函数,在views.py 中定义

    from django.http import HttpResponse  
      
    def index(request):
        # 这你是处理的语句
        return HttpResponse("hello python")  # 处理完后把你想要返回的数据返回
    

视图函数必须有一个参数request,进行处理之后,需要返回一个 HttpResponse 的类对象,**hello python ** 就是返回给浏览器显示的内容。

2.配置URL

  • 首先可以先把项目中(即/test1目录下)的urls.py进行配置

这里配置只是正则并没有写具体,而是包含具体应用的 urls.py 文件,在应用的 urls.py 文件中写 url 和 视图函数 的对应关系。

  • 然后创建应用(即在/test1/booktest目录下)的urls.py ,在进行配置

这里就建立了与 views 联系,然后可以输入127.0.0.1:8000/index去访问看看啦

  • 说一下匹配过程

    请求者在浏览器地址栏中输入 url,请求到网站后,获取 url 信息,然后先在项目中的urls.py 进行逐条匹配,再去 应用中的 urls.py 进行匹配,只要途中匹配成功,则调用对应的视图函数,若都没有匹配成功,则返回404错误


模板

  • 要返回一个漂亮的页面,就需要用到前端写的数据,在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用

1.创建模板

  • 首先创建存放模板的文件夹

  • 然后就可以在里面创建模板文件

2.配置模板目录

  • 同样在settings.py文件下进行配置

3.定义模板

  • 在 html 文件下去写要显示的内容

  • 代码和数据变量

    • 在模板中也可以使用变量,变量可能是从视图中传递过来的,也可能是在模板中定义的

      • 页面格式好像不支持,就截图吧~~

    • 代码段,在模板文件中也可以使用代码,如一个for循环

4.视图调用模板

  • 分为三步:
    • 1.找到模板
    • 2.定义上下文
    • 3.渲染模板
  • views.py文件下

    from django.http import HttpResponse
    from django.template import loader, RequestContext
      
    def index(request):
        """进行处理,和M和T进行交互"""
        # 使用模板文件
        # >> < 1 >加载模板文件
        temp = loader.get_template('booktest/index.html')
        # >> < 2 >定义上下文:给模板文件传递数据
        context = RequestContext(request,{})
        # >> < 3 >模板渲染:产生标准的HTML内容
        res_html = temp.render(context)
        # >> < 4 >返回给浏览器
        return HttpResponse(res_html)
    
    • Django 把上面的代码进行了封装在了一个 render模块中

      from django.shortcuts import render
          
      def index(request):
          # return my_render(request, 'booktest/index.html')
          return render(request, 'booktest/index.html', {'content': '我最帅!', 'list': list(range(0, 10))})
      
      • 它有三个参数:
        • 第一个参数为 request 对象
        • 第二个参数为模板文件路径
        • 第三个参数为字典,表示向模板中传递的上下文数据

后台管理

  • 在上面配置项目urls.py时,是不是好奇怎么有个匹配 admin 的,这个就是Django 提供的一个后台管理页面

1.本地化

  • 语言和时区的本地化

  • 修改settings.py文件

2.创建管理员

python manage.py createsuperuser
  • 跟着提示输就行了,然后

3.注册模型类

  • 在应用下的admin.py中注册模型类

  • 在类模型下添加这个,这是返回给页面的

4.自定义管理页面

  • 就是自定义显示的东东是啥,在上图中有,想显示什么字段之类的

这绝对是我写得最长的一篇了。。。

END…..