zoukankan      html  css  js  c++  java
  • [Python] Django框架入门

    本系列主要为Django入门教程,通过简单几步,可以快速入门Django。

    系列目录:

      1、[Python] Django框架入门

      2、[Python] Django框架入门2——深入模型

      3、[Python] Django框架入门3——深入视图

      4、[Python] Django框架入门4——深入模板

      5、[Python] Django框架入门5——静态文件、中间件、上传图片和分页

    说明:Django框架入门

      当前项目环境:python3.5、django-1.11

      项目名:test1

      应用名:booktest

      命令可简写为:python manager.py xxx => ./manager.py xxx 

     

    准备:已经安装python并加入环境变量

      已安装 django

     

    设计框架对比(引用,可自行搜索):

      1、MVC

        MVC框架的核心思想是:解耦

        降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用

        m表示model,主要用于对数据库的封装

        v表示view,用于向用户展示结果

        c表示controller,是核心,用户处理请求,获取数据,返回结果

      2、MVT

        Django属于MVT框架

        m表示model,负责与数据库交互

        v表示view,是核心,负责接收请求、获取数据、返回结果

        t便是template,负责呈现内容到浏览器

      

      个人觉得两种框架基本大同小异

     

    一、开始

      1、创建项目:test1

         > django-admin startproject test1  

      2、进入test1目录创建应用:booktest

         > python manager.py startapp booktest 

        创建完成,可以看到项目下booktes目录    

      3、启动服务器,测试

         > python manager.py runserver [8080] 

        

        端口号可以指定,默认8000

        打开浏览器访问 : 127.0.0.1:8080

         

    二、创建模型:

      打开booktest目录下的 models.py文件,编辑如下  

     1 from django.db import models
     2 """
     3     models文件的作用:
     4         1、根据models的定义去生成SQL语句,并创建表
     5         2、创建对象,对对象进行各种操作
     6     图书-英雄的关系为一对多
     7 """
     8 
     9 
    10 # 图书表
    11 class BookInfo(models.Model):
    12     # 默认自动生成id
    13     # 图书名称
    14     btitle = models.CharField(max_length=20)
    15     # 图书发布时间
    16     bpub_data = models.DateTimeField()
    17 
    18     def __str__(self):
    19         return self.btitle
    20 
    21 
    22 
    23 # 英雄表
    24 class HeroInfo(models.Model):
    25     # 英雄姓名
    26     hname = models.CharField(max_length=10)
    27     # 英雄性别
    28     hgender = models.BooleanField()
    29     # 英雄简介
    30     hcontent = models.CharField(max_length=500)
    31     # 所属图书 : 外键引用对象
    32     hbook = models.ForeignKey(BookInfo)

    三、生成数据表

      1、激活模型:编辑settings.py文件,将booktest应用加入到INSTALLED_APPS下,编辑之后如下:

    1 INSTALLED_APPS = [
    2     'django.contrib.admin',
    3     'django.contrib.auth',
    4     'django.contrib.contenttypes',
    5     'django.contrib.sessions',
    6     'django.contrib.messages',
    7     'django.contrib.staticfiles',
    8     'booktest',  # 我们添加的应用
    9 ]

        数据库使用默认的sqlite  

      2、生成迁移文件:根据模型类型生成sql语句

         > python manager.py makemigrations 

        结果如下所示:

             

      

       3、执行迁移:执行sql语句生成数据表

         > python manager.py migrate 

                  

         

    四、测试数据库操作:进入django的shell进行测试

      > python manager.py shell 

      1、添加记录,并查看

        

             

          

     五、定义视图

      这里为了方便处理,在booktest应用下新建了一个urls.py文件,方便管理

      1、Route配置

        ① 查看setting.py文件如下:

         ROOT_URLCONF = 'test1.urls' 

        ② 修改test1/urls.py文件如下:

    1 from django.conf.urls import url, include
    2 from django.contrib import admin
    3 
    4 
    5 urlpatterns = [
    6     url(r'^admin/', admin.site.urls),
    7     # 使用应用的urls
    8     url(r'^', include('booktest.urls'))
    9 ]

        ③ 在booktest目录下新建urls.py文件,编辑如下:  

    1 from django.conf.urls import url
    2 from . import views
    3 
    4 urlpatterns = [
    5     # 首页的处理方法
    6     url(r'^$', views.index)
    7 ]

      2、修改视图文件 booktest/views.py 

    1 from django.http import *
    2 
    3 
    4 def index(request):
    5     # 打印 字符串
    6     return HttpResponse("Hello Django")

      3、测试视图,结果如下

      

     六、定义模板(这里仅仅对模板进行展示,更多模板操作,可查阅官方文档)

      1、创建templates目录,并添加文件 index.html,编辑 index.html文件:

         

        

      2、 修改settings.py文件,编辑如下:

        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 修改目录

        

         3、修改视图文件 views.py

     1 from django.shortcuts import render
     2 from django.http import *
     3 from django.template import RequestContext, loader
     4 
     5 
     6 def index(request):
     7     # # 加载模板 render() 渲染模板
     8     # tmp = loader.get_template('booktest/index.html')
     9     # return HttpResponse(tmp.render())
    10     return render(request, 'booktest/index.html')

     

      4、测试,刷新页面

       

     

    附录一:使用Django提供管理站点,对数据库进行管理

      1、创建管理用户

         > python manager.py createsuperuser 

        按照要求输入账号、邮箱、密码

        

      2、打开网页,登录

        浏览器访问地址(根据自己的情况):127.0.0.1:8000/admin

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

         

      3、管理界面本地化(显示为中文、修改时区)

        修改配置文件settings.py 如下:

    1 # LANGUAGE_CODE = 'en-us'
    2 LANGUAGE_CODE = 'zh-hans'
    3 
    4 # TIME_ZONE = 'UTC'
    5 TIME_ZONE = 'Asia/Shanghai'

        语言代码与版本有关:1.8之后使用“zh-hans”,之前是“zh-cn”

      

      4、自定义管理界面

           Django提供了admin.ModelAdmin类,来定义模型在Admin界面显示的方式

        需要在django提供的管理站点进行管理model,则需要修改应用下的admin.py文件如下:

    1 from django.contrib import admin
    2 from .models import *
    3 
    4 
    5 # 如果需要通过/admin进行管理,需要进行注册
    6 admin.site.register(BookInfo)
    7 admin.site.register(HeroInfo)

        如果对页面有更多的要求、显示更多内容,则如下更改admin.py

     1 from django.contrib import admin
     2 from .models import *
     3 
     4 
     5 class HeroInfoInline(admin.TabularInline):
     6     """
     7          关联对象注册
     8          可以继承的父类:
     9             1-层叠显示:admin.TabularInline
    10             2-表格显示:admin.StackedInline
    11     """
    12     model = HeroInfo
    13     extra = 3
    14 
    15 
    16 class BookInoAdmin(admin.ModelAdmin):
    17     # 1、列表页属性
    18     # 显示字段:可以点击列头进行排序
    19     list_display = ['id', 'btitle', 'bpub_data']
    20     # 过滤字段:过滤框会出现在右侧
    21     list_filter = ['btitle']
    22     # 搜索字段:搜索框会出现在上侧
    23     search_fields = ['btitle']
    24     # 分页:分页框会出现在下侧
    25     list_per_page = 10
    26 
    27     # 2、修改、添加页属性
    28     # 属性分组
    29     fieldsets = [
    30         ('base', {'fields': ['btitle']}),
    31         ('super', {'fields': ['bpub_data']})
    32     ]
    33     # 关联的对象
    34     inlines = [HeroInfoInline]
    35 
    36 
    37 class HeroInfoAdmin(admin.ModelAdmin):
    38     # 显示字段:可以点击列头进行排序
    39     list_display = ['id', 'hname', 'gender', 'hcontent']
    40 
    41 
    42 # 如果需要通过/admin进行管理,需要进行注册
    43 admin.site.register(BookInfo, BookInoAdmin)
    44 admin.site.register(HeroInfo, HeroInfoAdmin)

         下图为列表页面:对应上图的BookInfoAdmin中以为 list_xxx 开头的字段

         

          下图为修改、新增页面:对属性进行分组,对应上面代码的BookInfoAdmin的 fieldsets字段

         

      5、管理对象的注册

        修改admin.py文件如下:

        

        

      6、布尔值显示

         修改models.py文件如下

         

         修改models.py文件

        

     

     

     

     

  • 相关阅读:
    作为一个非计算机专业的人,你们是怎样进入IT行业的?
    第一次写博客
    变卖
    近2周关于Shadowing的总结
    二十九岁步入而立之年的思考
    最美的回忆漫天的雪
    有趣的房东夫妇
    遥远的思恋—我的儿子
    五年一轮回
    写在开工之前我的2010
  • 原文地址:https://www.cnblogs.com/reader/p/9436243.html
Copyright © 2011-2022 走看看