Django框架走通

Django框架基本走通

  • 下载django

      pip install Django==3.0
    
      
      pip uninstall Django==3.0 卸载
    
  • 查看版本

      >>> import django
      >>> django.get_version() #查看版本
    

MVC设计模式

	 用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务聚集	到一个
部件里面,在改进和个性定制界面与用户交互的同时,不需要重新
编写业务逻辑
MVC设计模式被独特的发展起来用于映射传统的输入,处理和输出功能
在一个逻辑的图形话界面结构中

核心思想 : 解耦

优点:降低耦合性 , 方便变更 ,容易重构 ,实现了代码重用
  • MVC (model , view ,controller)

      model : 用于封装与应用程序的业务逻辑相关的的数据及对数据
     		 的处理方法,是web应用程序中用于处理应用程序的数据逻辑部分,
     	 	model通常只提供功能性的接口,通过这些接口可以获取model的所有
      		功能
    
      view: 负责数据的显示和呈现,view是对用户的直接输出
    
      controller : 负责从用户端搜集用户的输入,可以处理交互逻辑
    
  • MTV (model view template)

      model : 负责业务对象与数据库(ORM)的对象
      view : 负责业务逻辑,并在适当的时候调用model 和template
      template : 负责把页面展示给用户
      
      注意: DJango 还有一个url分发器(路由),主要用来将一个url页面的请求
      分发给不同的view进行处理,view再调用相应的model和template
    

创建项目

1.再合适位置创建目录
    2.打开cmd 进入上一步创建的目录下
    3.输入django-admin startproject 项目名 (例如 django-admin startproject project)
    4.目录层级说明:
        manage.py:一个命令行工具,可以使我们用多种方式对django进行交互
        项目名目录(project目录):
            __init__.py :它告诉python这个目录应该被看作python包
            settings.py :项目的配置文件
            uls.py : url管理器,是项目的url声明
            wsgi.py : 项目与WSGI兼容的web服务器入口

基本操作:

  • 1.设计表结构

     班级表结构-表名 grade
                      -字段 (班级名称gname,成立时间gdate,女生总数ggirlnum,男生总数gboynum,是否删除isdelete)
            -学生表结构-表名 students
                      - 字段 (姓名sname,性别sgender,年龄sage,简介scontend,从属班级sgrade,是否删除isdelete)
    
  • 2.配置数据库

      (注意Django默认使用sqlite3)
             -在settings.py中,通过DATABASES选项进行数据库配置
             -配置mysql - python 安装的是pyMySQL
                         -1.在__init__.py文件中写入两行代码
                             import pymysql
                             pymysql.install_as_MySQLdb()
                         -2.在settings 中配置这些
                         DATABASES = {
                              'default': {
                                  'ENGINE': 'django.db.backends.mysql',
                                  'NAME': "数据库名",
                                  'USER':'mysql用户名',
                                  'PASSWORD':'mysql密码',
                                  'HOST':'数据库服务器ip',
                                  'POST':'端口',
                                  }
                              }
    
  • 3.创建应用

      在一个项目中可以创建多个应用,每个应用进行一种业务处理)
            - 在cmd 中 进入项目目录下的project文件下 执行 python manage.py startapp 应用名 (例如 python manage.py startapp myApp)
            (注意:如果报错:找到python的安装路径C:\Users\Shinelon\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\django\db\backends\mysql
            运行base.py 将
            if version < (1, 3, 13):
            raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)注释即可)
    
            - 应用目录说明:
              admin.py : 站点配置
              models.py: 模型
              views.py :视图
    
  • 4.激活应用

       在settings.py文件中,将创建好的应用加入到INSTALLED_APPS选项中  (例如 在INSTALLED_APPS 中填写一句代码:'myApp' 即可)
    
  • 5.定义模型

      概述:有一个数据表,就对应有一个模型。
                  在应用目录下的models.py文件中定义模型
                      引入 :from django.db import models(模型类要继承models.Model类)
                      编写代码(模型类中的属性对应数据库中表的字段名)
      说明 :1.不需要定义主键,在生成时自动添加,并且值为自动增加
    
  • 6.在数据库中生成数据表

      1.生成迁移文件
                             - 在project项目目录下执行cmd命令 :python manage.py makemigrations
                                 ("如果报错":解决方案:
                                 在models.py中的关联外键代码中的ForeignKey()里,增加:on delete=models.CASCADE
                                 )
    
                             - 创建的迁移文件在应用目录下的migrations下的0001_initaial.py(迁移文件)
                                 ( 注意:此时数据库还没有生成数据表)
    
                         2.执行迁移 :相当于创建数据表
                             - 在project项目目录下执行cmd命令:python manage.py migrate
                                 (“如果报错”(django和mysql版本不兼容问题):在settings.py中添加如下代码:
                                 from django.db.backends.mysql.base import DatabaseWrapper
                                 DatabaseWrapper.data_types['DateTimeField'] = 'datetime')
    
  • 7.测试数据操作

      		 - 1.在project项目目录下执行cmd命令:
                          python manage.py shell
    
      		 - 2.引入包:在shell中执行:
                         >>>from myApp.models import Grades,Student
                         >>>from django.utils import timezone
                         >>>form datetime import *
    
                 数据的增删改查:
    
                - 查询所有数据
                          格式:类名.objects.all()
                                 >>> Grades.objects.all()
    
    
                - 添加数据  -本质:创建一个模型类的实例
    
 						>>> grade1 = Grades()
                        >>> grade1.gname = "python04"
                        >>> grade1.gdate = datetime(year=2020,month=7,day=17)
                        >>> grade1.ggirlnum = 3
                        >>> grade1.gboynum=20
                        >>> grade1.save()

                        >>> grade2 = Grades()
                        >>> grade2.gname = "python05"
                        >>> grade2.gdate = datetime(year=2017,month=2,day=31)
                        >>> grade2.ggirlnum = 33
                        >>> grade2.gboynum = 20
                        >>> grade2.save()
              - 查看(获取)指定对象
                    格式:类名。objects.get(条件)
                    >>>Grades.objects.get(pk=2) #获取到的是grade2
                    >>> grade1 = Grades.objects.get(pk=1)
              - 修改数据
                    格式:模型对象.属性=新值
                          模型对象.save()
                    >>> grade2.gboynum = 60
                    >>> grade2.save()
              - 删除数据
                物理删除:数据库中表里的数据被删除
                    格式:模型对象.delete()
                    >>> grade2.delete()

              - 关联对象
                    >>> stu = Student()
                    >>> stu.sname="luciano"
                    >>> stu.sgender=False
                    >>> stu.sage = 22
                    >>> stu.scontend = "我是luciano"
                    >>> stu.sgrade = grade1  #外键关联对象grade1
                    >>> stu.save()

                    - 获得关联对象的集合
                        -需求:获取python04班级的所有学生
                            格式:对象名.小写的关联的类名_set.all()
                            grade1.student_set.all()
                    - 需求:创建邹旭尧,属于python04
                            stu3 = grade1.student_set.create(sname=u'lcuaino',sgender=True,scontend=u'我叫luciano',sage=22)
                            注意:直接插入到了数据库中 不用save()
  • 8.启动服务器

      在project项目目录下执行cmd命令:
                  格式:python manage.py runserver ip:port
                  说明:如果ip省略代表本机ip  端口号默认8000
                    例如:python manage.py runserver
    
                概念:这是一个python写的轻量级web服务器,仅仅在开发测试中使用
    
  • 9.Admin站点管理:

      	 概述:内容发布:负责添加、修改、删除内容针对数据库
               配置Admin应用
                  在settings文件中的INSTALLED_APPS 添加 'django.contrib.admin',(默认自动添加)
               创建管理员用户
                  在project项目目录下执行cmd命令:python manage.py createsuperuser
                  Username:luciano  Email address: lucianozxy@163.com password :1234567890
               管理数据表:
                  修改admin.py:
    
    #自定义管理页面  添加如下代码
                        from .models import Grades,Student
                            # 显示设置班级类
                            class GradesAdmin(admin.ModelAdmin):
                                #列表页属性
                                list_display = ['字段名','...']  #显示字段
                                list_filter = ['过滤字段'] #过滤器
                                search_fields = ['搜索字段']#搜索框
                                list_per_page = 数字 #分页

                                #添加、修改页属性
                                fields = ['字段名1','字段名2',....] #给字段排序(不要有pk)
                                fieldsets = [
                                ("分组名1",{"fields":['字段名1','字段名2'....]}),
                                ("分组名2",{"fields":['字段名1','字段名2'.....]})
                                ]
                            #显示设置学生类
                            class StudentAdmin(admin.ModelAdmin):
                                list_display = ['字段名','...']
                                list_per_page = 数字 #分页


                            #注册(提交数据和管理类)
                            admin.site.register(Grades,GradesAdmin)
                            admin.site.register(Student,StudentAdmin)


                        #关联对象
                            #需求:再创建一个班级的时候可以直接添加几个学生
                                class StudentInfo(admin.TabularInline):
                                    # 创建一个班级有两个学生
                                    model = Student
                                    extra = 2
                                class GradesAdmin(admin.ModelAdmin):
                                    #接受关联类
                                    inlines = [StudentInfo]



                        #bool值显示问题:
                            class StudentAdmin(admin.ModelAdmin):
                                #自定以bool值显示问题
                                def gender(self):
                                    if self.sgender:
                                        return "男"
                                    else:
                                        return "女"
                                #设置页面字段的名称
                                gender.short_description = "性别"



                        #执行动作位置(Action):在显示设置类中
                            #Aciton的位置
                            actions_on_top = False #上面没有
                            actions_on_bottom = True #下面有
  • 10.视图的基本使用

    -在django中,视图对web请求进行回应
              视图就是python的函数,在views.py文件中定义
              1.定义视图(定义函数)
                 from django.http import HttpResponse
    
                 def index(request):
                     return HttpResponse("luciano is good man")
                 def detail(request,num):
                     return HttpResponse("detail-%s"%num)
              2.修改project文件下的urls.py
                 from django.contrib import admin
                 from django.urls import path,include
    
                 urlpatterns = [
                     path('admin/', admin.site.urls),
                     path('',include('myApp.urls')), #若文件在同级目录则不用写父级目录名,非同级目录要写父级目录下的指定文件
                 ]
              3.在myApp应用目录下创建一个urls.py文件(re_path支持正则)
                 from django.urls import path,re_path
                 from . import views   #当前目录下的views
    
                 urlpatterns = [
                     path('',views.index),
                     re_path(r'^(\d+)/$',views.detail),
                 ]
    
  • 11.模板的基本使用

      概述:模板是HTML页面,可以是根据视图中传递过来的数据进行填充
               1.创建模板目录 -在myApp、project同级目录下创建templates目录,然后在templates下在创建一个应用模板目录(项目名/project/templates/myApp)
               2.配置模板路径 -修改settings.py文件下的TEMPLATES
                  'DIRS': [os.path.join(BASE_DIR,'templates')],
               3.定义模板grades.html 和 student.html
                  模板语法:{{输出值,可以是变量,可以是对象.属性}}
                           {%执行代码段%}
                  需求一:输入http://127.0.0.1:8000/grades 显示班级信息
                      -1.写grades.html模板
                          <ul>
                          {%for grade in grades%}
                              <li>
                                  <a href="#">{{grade.gname}}</a>
                              </li>
                          {%endfor%}
                          </ul>
                      -2.定义视图
                          在views.py
                          from .models import Grades, Student
                          def grades(request):
                              # 去模板里面取数据
                              gradesList = Grades.objects.all()
                              # 将数据传递给模板,模板在渲染页面,将渲染好的页面返回给浏览器
                              return render(request,'myApp/grades.html',{"grades":gradesList})
                      -3.配置urls.py
                          re_path(r'^grades/$',views.grades)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值