web框架:
web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。
一般web框架的架构是这样的:
Django简介:
Django发布于2005年,是当前Python世界里最负盛名且成熟的网络框架。最初用来制作在线新闻的Web站点。
Django是一个用Python编写的开放源代码的Web应用框架(源代码是开源的,遵守BSD版权)。采用了MVC的框架模式,也有很多人把它称为MVT(MTV)模式。
MVC设计模式 :
MVC:
M(Model模型)数据,
V(View界面)界面,
C(Controller控制器) 写逻辑处理
一种软件设计典范,用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面与用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化界面结构中。
核心思想:解耦(降低耦合度)
优点:降低各模块之间的耦合性,方便变更,更容易重构代码,最大程度实现了代码的重用。
MVC设计模式:
MVC(Model,View,Controller)
Model:用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑部分,Model通常只提供功能性的接口,通过这些接口可以获取Model的所有功能。
View: 负责数据的显示和呈现,View是对用户的直接输出。
Controller: 负责从用户端收集用户的输入,可以看成提供View的反向功能,主要处理用户交互。
MVC设计模型:
图解:
MVC设计模式:
图解:
MVT(MTV)模式简介:
本质上与MVC没什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同。
Model(数据):负责业务对象与数据库(ORM)的对象(类对应表)
View(逻辑):负责业务逻辑,并在适当的时候调用Model和Template
Template(界面): 模板,负责把页面展示给用户
注意:Django中还有一个url分发器(也可以叫做路由),主要用来将一个个URL页面的请求分发给不同的View进行处理,View再调用相应的Model和Template。
MVT设计模式:
**建议用ubuntu操作**
(virtualenv 和virtualenvwrapper)
1.1, virtualenv的概述
virtualenv是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实环境存在,并且可以同时有多个互相独立的Python虚拟环境,每个虚拟环境都可以营造一个干净的开发环境,对于项目的依赖、版本的控制有着非常重要的作用。 虚拟环境有什么意义? 如果我们要同时开发多个应用程序,应用A需要Django1.11,而应用B需要Django1.8怎么办? 这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。 virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。
1.2, pip的常用命令
安装pip python: sudo apt install python3-pip 更新pip: pip install --upgrade pip 【sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150 这个可以吧python3设置为默认的】 pip install xxx:安装xxx依赖包 pip list:查看所有依赖包 pip freeze:查看新安装的包 pip uninstall xxx :卸载xxx包
pip 10.0.0 BUG 解决方案:
使用pip3 出现以下错误:
Traceback (most recent call last):
File “/usr/bin/pip3”, line 9, in
from pip import main
或者pip 时也出现这个问题 这是pip 10.0.0版本的BUG
**解决办法**
修改 /usr/bin/pip 文件
使用: sudo vim /usr/bin/pip
```
from pip import main
if __name__ == '__main__':
sys.exit(main())
```
改为:
```
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
```
1.3, virtualenv和virtualenvwrapper 的安装和使用
a, 安装虚拟环境 sudo apt update sudo apt install virtualenvwrapper 如果不能使用虚拟环境命令,则需要配置环境变量 1, 进入目录: cd ~ 2, 使用vim打开.bashrc, 定位到最后:shift+g,并添加以下3行代码 # python export WORKON_HOME=/home/自己的用户名/.virtualenvs source /usr/share/virtualenvwrapper/virtualenvwrapper.sh 3, 在家目录创建.virtualenvs目录: mkdir .virtualenvs 4, 加载修改后的设置,使之生效:source .bashrc 【如出现问题,尝试命令:sudo pip3 install virtualenv virtualenvwrapper】 b, 创建虚拟环境: mkvirtualenv env mkvirtualenv env2 -p /usr/bin/python c, 退出虚拟环境 deactivate d, 进入虚拟环境: workon 虚拟环境名称
安装django
切换到root用户: sudo -s 安装Django: pip install django==1.11(也可指定某一版本 pip install django==1.11) 测试Django是否安装成功 进入python环境 import django django.get_version()
创建一个Django项目
进入到指定要存放项目的目录,执行 django-admin startproject xxx 来创建一个名字为xxx的工程
查看默认目录结构
manage.py:是Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。 HelloDjango/__init__.py告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可能会用到 HelloDjango/settings.py Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等。 HelloDjango/urls.py 维护项目的URL路由映射,即定义当客户端访问时由哪个模块进行响应。 HelloDjango/wsgi.py 定义WSGI的接口信息,主要用于服务器集成,通常本文件生成后无需改动。
测试服务器的启动
python manage.py runserver [ip:port]
可以直接进行服务运行 默认执行起来的端口是8000 也可以自己指定ip和端口: 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip):python manage.py runserver 0.0.0.0:8000 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器,访问对应的 ip加端口,比如 10.36.132.2:8000 浏览器访问:http://localhost:8000 可以看到服务器启动成功
数据迁移迁移的概念:就是将模型映射到数据库的过程
生成迁移:python manage.py makemigrations
执行迁移:python manage.py migrate
创建应用python manage.py startapp XXX创建名称为XXX的应用使用应用前需要将应用配置到项目中,在settings.py中将应用加入到INSTALLED_APPS选项中
应用目录介绍
__init__.py:其中暂无内容,使得app成为一个包 admin.py:管理站点模型的声明文件,默认为空 apps.py:应用信息定义文件,在其中生成了AppConfig,该类用于定义应用名等数据 models.py:添加模型层数据类文件 views.py:定义URL相应函数(路由规则) migrations包:自动生成,生成迁移文件的 tests.py:测试代码文件
基本视图
首先我们在views.py中建立一个路由响应函数 from django.http import HttpResponse def welcome(request): return HttpResponse('HelloDjango'); 接着我们在urls中进行注册 from App import views url(r'^welcome/',views.welcome) 基于模块化的设计,我们通常会在每个app中定义自己的urls 在项目的urls中将app的urls包含进来 from django.conf.urls import include url(r'^welcome/',include('App.urls'))
基本模板
模板实际上就是我们用HTML写好的页面 创建模板文件夹templates, 在模板文件夹中创建模板文件 在views中去加载渲染模板, 使用render函数: return render(request,'xxx')
定义模型在models.py 中引入modelsfrom django.db import models
创建自己的模型类,但切记要继承自 models.Model
案例驱动,使用模型定义班级,并在模板上显示班级列表
班级: table : grades columns: 班级名称 - name 成立时间 - date 女生个数 - girlnum 男生个数 - boynum 是否删除 - is_delete
Admin 后台管理
在admin.py中将model加入后台管理:
admin.site.register(Grade)
创建超级用户:python manage.py createsuperuser
访问admin后台:http://127.0.0.1:8000/admin/
展示班级列表
在views.py文件中编写班级的视图函数:
def grade_list(request): g_list = Grade.objects.all() # 获取班级所有数据 return render(request, 'grade/grade_list.html', {'g_list': g_list})
模板文件:
{% for grade in g_list %} {{ grade.sname }} {% endfor %}
配置url
在grade App中新建urls.py文件,输入如下代码:
from django.conf.urls import url from .views import grade_list urlpatterns = [ url(r'^grade/$', grade_list), ]
在工程的urls.py文件中添加如下代码:
url(r'^', include('grade.urls')),
下一篇:Django基础__( url 和 模板 )