Django基础

#Django

一.软件框架

一个软件框架是有期中各个软件模块组成的,每一个模块都有特定功能,模块与模块之间通过相互配合来完成软件开发。

二.MVC框架

MVC的核心思想:解耦

MVC框架里面的三个模块:

  • M:Model模型,和数据库进行交互。
  • V:View视图,产生HTML页面。
  • C:Controller控制器,接收请求,进行处理,与M和V进行交互,返回应答。

三.MVT

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

四:虚拟环境

点击查看:Django网站www.djangoproject.com

点击查看:Django1.8.2中文文档www.python.usyiyi.cn

  • 之前安装的Python包的命令:sudo pip3 install 包名

  • 包的安装路径: /usr/local/lib/python3.5.0/dist-packages

  • 安装同一个包不同版本,后安装的包会把原来安装的包覆盖掉。这样,如同一台机器上两个项目依赖于相同包的不同版本,则会导致一些项目运行失败。

  • 解决方案就是:虚拟环境

  • 虚拟环境就是Phthon环境的复制版本。

  • 在虚拟环境中使用的Python是复制的Python安装Python包也是安装在复制的Python中。

安装虚拟环境的命令:

安装虚拟环境所需要的包

1
2
sudo pip install virtialenv             //安装虚拟环境
sudo pip install virtualenvwrapper //安装虚拟环境拓展包

在主目录下边编辑配置文件

1
2
3
4
5
6
7
8
编辑家目录下面的     
vi .bashrc文件, //添加下面两行到末尾
i //写入
export WORKON_HOME=$HOME/.virtualenvs //¥HOME 代表家目录的路径
source /usr/local/bin/virtualenvwrapper.sh //创建虚拟环境要使用一些命令要想直接使用命令就得把这两句话加上
Esc
:wq //保存退出
source.bashrc //使其生效一下

创建虚拟环境

1
2
3
4
makvirtualenv         //创建虚拟环境
例子:
mkvirtualenv -p python3 bj18_py3
创建虚拟环境 指定版本 虚拟环境的名称

退出虚拟环境

1
deactivate              //退出虚拟环境

进入虚拟环境

1
2
workon       //进入虚拟环境
列:workon bj18_py3 输入命令 指定需要进入到那个虚拟环境

查看机器上有多少个虚拟环境

1
输入 workon 加上 空格 和两个 Tab

删除虚拟环境

1
rmvirtualenv 加上 需要删除虚拟环境的名字

查看当前虚拟环境下面安装了多少Python包

1
2
pip list
pip freeze

安装指定版本的包

1
pip install django==2.0.4

五:项目创建

命令

1
django-admin startproject 项目名

1.目录结构

1
2
3
4
5
__init__.py                   //说着这个文件是一个python包
settings.py //项目的配置文件
urls.py //进行Url路由的配置
wsgi.py //web服务器和我们的Django交互的入口
manage.py //项目的管理文件

2.创建应用

1
2
python manage.py startapp booktest
python manage.py startapp 应用名字
  • 应用文件下面的文件作用

    1
    2
    3
    4
    5
      __init__.py               //说明目录是一个Python模块
    models.py //写和数据库相关的内容
    views.py //接受请求、进行处理、与M和T进行交互、返回应答.定义处理函数(视图函数)
    tests.py //写测试代码的文件
    admin.py //网站后台管理相关的文件

建立应用和项目之间的连续,需要对应用进行注册

1
2
3
4
5
6
7
8
9
10
项目名————>settings.py   --↓
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booktes', <-----以应用的名字进行项目注册
]
  • 启动项目
1
python manage.py runserver

六.ORM

ORM 可以通过类和对象去操作他对应的表,不需要sql语句。

1
2
3
Object:对象 - 类
Mapping:映射
Relations:关系,关系数据库中的表

models.py //这个文件的作用是 设计和表对应的类,模型类

七.模型类

1.模型类设计

在应用models.py 中设计模型类。

必须继承与models.Model类

Models.ForeignKey可以建立两个模型之间一对多的关系,Django在成功生成表的时候,就会在表中管创建一列作为外键,建立两个表之间一对多的关系。

2.模型类生成表

  • 生成迁移文件

    命令:

    1
    python manage.py makemigrations

    迁移文件是根据模型类生成的

  • 执行迁移生成表

    1
    python manage.py migrate

    migrate 里面的迁移文件不能删,因为每次迁移都有依赖关系

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    C:\Users\Administrator\Desktop\Django>python manage.py migrate
    Operations to perform:
    Apply all migrations: admin, auth, booktest, contenttypes, sessions
    Running migrations:
    Applying contenttypes.0001_initial... OK
    Applying auth.0001_initial... OK
    Applying admin.0001_initial... OK
    Applying admin.0002_logentry_remove_auto_add... OK
    Applying contenttypes.0002_remove_content_type_name... OK
    Applying auth.0002_alter_permission_name_max_length... OK
    Applying auth.0003_alter_user_email_max_length... OK
    Applying auth.0004_alter_user_username_opts... OK
    Applying auth.0005_alter_user_last_login_null... OK
    Applying auth.0006_require_contenttypes_0002... OK
    Applying auth.0007_alter_validators_add_error_messages... OK
    Applying auth.0008_alter_user_username_max_length... OK
    Applying auth.0009_alter_user_last_name_max_length... OK
    Applying booktest.0001_initial... OK
    Applying sessions.0001_initial... OK //这是对他来执行的迁移文件
  • Django 默认使用的数据库是 sqlite3 的数据库

    1
    2
    - sqlite3 是一个关系型数据库
    - 也是一个小型数据库经常用在移动端,手机端

3.通过模型类操作数据表

实例实行和例属性不是一种

通过shell操作数据表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
python manage.py shell               //进入shell命令


增加:
from booktest.models import BookInfo //引入数据库
b = BookInfo() //实例化一个数据库
b.btitle = '天龙八部' //添加名称
from datetime import date //导入日期模块
b.bpub_date = date(1990.1.1) //添加日期
b.save() //保存数据

查找:
b2 = BookInfo.objects.get(id=1) //通过ID查找
type(b2) //返回Booktest.models.BookInfo 类型
b2.btitle //返回数据
b2.id //返回数据

修改: //修改是建立在查找的基础伤
b2.bpub_date = date(1990.10.10) //直接修改玩是不会改变
b2.save() //需要save保存

删除:
b2.delete() //指定删除

八.后台管理

  • 本地化

    • 语言和时区的本地化

      1
      2
      LANGUAGE_CODE='zh-hans'
      TIME_ZONE='Asia/Shanghai' //这里面没有背景时间,只有亚洲上海的时间
    • 修改setting.py文件

  • 创建管理员

    命令:

    1
    python manage.py createsuperuser
  • 注册模型类

    • 在应用下的admin.py 中注册模型类
    • 告诉Django框架根据注册的模型类来生成对表管理页面
    • 进入admin后如果想直接显示name可以:
    1
    2
    def __str__(self):
    return self.name //返回表的name字段
  • 自定义管理页面

    • 自定义模型管理类。模型管理类就是告诉Django再生产管理页面上显示那些内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      from django.contrib import admin
      from .import models

      #自定义模型管理类
      class BookInfoAdmin(admin.ModelAdmin):
      '''图书模型管理类'''
      list_display = ['id','btitle','bpub_date']

      #第二个参数放模型管理类的类名
      admin.site.register(models.BookInfo,BookInfoAdmin)
      admin.site.register(models.Studeng)
      admin.site.register(models.HeroInfo)

九.视图

在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的视图函数处理之后,要给浏览器返回页面内容。

1.视图函数的使用(仅供参考)

- 定义视图函数

  • 视图函数定义在views.py中。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from django.shortcuts import render
    from django.http import HttpResponse
    #Create your views here.
    #1.定义视图函数,HttpResponse
    #2.进行url配置,建立url地址和视图的对应关系
    #http://127.0.0.1:8000/index

    def index(request):
    #进行处理 ,和M和T进行交互
    return HttpResponse('hello python')

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

    ####- 进行url配置

    1. 所有的url配置都定义一个叫做urlpattems的列表中
    2. 每一个配置都会调用url函数第一个参数是正则表达式,第二个参数是对应的处理动作,可以写一个视图函数的名字。
    3. 和url 字符串进行正则匹配,匹配成功则执行后面响应的动作。
    4. 对应的动作可以是一个视图函数的名字,也可以是包含一个应用的urls.py文件

    url 配置的目的是让建立url和视图函数的对应关系,url配置定义在urlpatterns的列表中,每一个配置项都调用url函数。

    主路由
    1
    2
    3
    4
    5
    6
    7
    8
    from django.contrib import admin             //主路由文件的admin管理员
    from django.urls import path,re_path,include //include 是命名子路由用的


    urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('booktest.urls')) //定义子路由 (应用名字+子路由文件)
    ]
    子路由
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from django.conf.urls import url
    from django.urls import path,re_path
    from .import views

    urlpatterns = [
    path('index/', views.index),
    path('',views.index),
    url(r'^index/$',views.index),
    re_path(r'index',views.index),
    ]

url函数有两个参数,第一个是一个正则表达式,第二个是对应的处理动作。

配置url时候有两种语法格式:

  1. url(正则表达式,视图函数名)

  2. url(正则表达式,include(应用中的urls文件))

    工作中配置url时,首先在项目的ulrs.py 文件中添加配置项是,并不写具体的url和视图函数之间的对应关系,而是包含具体应用的urls.py 文件,在应用的urls.py文件中写 url 和视图函数的对应关系。

2.url匹配过程 (正则)

在项目的urls.py 文件中包含具体应用的urls.py文件,应用的urls.py文件中写url和视图函数的对应关系。

十.模板

模板不仅仅是一个HTML文件,

  • 可以在里面定义变量。
  • 还可以写类似于编程语言的语句。

1.模板的使用

  1. 创建模板文件夹 template

  2. 配置模板目录

    项目的setting.py里面有一个TEMPLATES配置项

    配置文件里面有一个常量

    1
    2
    #项目目录的绝对路径,项目不论放到哪个目录下面都能通过BASE_DIR把它的绝对路径拿到
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

    设置的时候我们就可以把我们的 BASE_DIR和tmplate拼接一下就可以了

    拼接的时候要使用os.path.json(BASE_DIR,’template’)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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',
    ],
    },
    },
    ]
  3. 使用模板文件 ps:老款的

    • 加载模板文件

      去模板目录下面获取html的内容,得到一个模板对象

    • 定义模板上下文

      向模板文件传递数据

    • 模板渲染

      得到一个标准的html内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from django.template import loader,RequestContext
    from django.http import HttpResponse

    def index2(request):
    '''使用模板'''
    # 1.加载模板文件,模板对象
    temp = loader.get_template('booktest/index2.html')
    # 2.定义模板上下文:给模板传递数据
    context = RequestContext(request,{})
    # 3.模板渲染:产生标准的HTML内容
    res_html = temp.render(context)
    # 4.返回给浏览器
    return HttpResponse(res_html)

    定义一个方法提供模板复用 //其实这个函数封装是多余的 ,Django给我们封装了render直接使用就行了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from django.template import loader,RequestContext
    from django.http import HttpResponse

    def my_render(request,template_path,context_dict):
    '''使用模板文件'''
    # 1.加载模板文件,模板对象
    temp = loader.get_template(template_path)
    # 2.定义模板上下文:给模板传递数据
    context = RequestContext(request,context_dict)
    # 3.模板渲染:产生标准的HTML内容
    res_html = temp.render(context)
    # 4.返回给浏览器
    return HttpResponse(res_html)

2.给模板文件传递数据

  • 模板变量使用:

    1
    {{  模板变量名 }}
  • for循环

    1
    2
    3
    {% for i in list %}
    {{ i }}
    {% endfor %}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com
目录
主站