44.1、什么时web框架:

1、框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用看框架可以

帮助你快速开发特定的形同,简单的说,就是你用别人搭建好的舞台来做表演。

2、对于所有的web应用,本质上就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

3、最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件

中读取HTML,返回。如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析

HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花

个把月去读HTTP规范。正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文

档,因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用

Python编写Web业务。这个接口就是WSGI(Web服务器网关接口):Web Server Gateway Interface。

44.2、MVC和MTV模式:

1、MVC模式:

所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在

一起。模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用

模型和视图完成用户的请求。

2、MTV:

(1)Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上

有些许不同。

(2)Django的MTV分别代表:

1)Model(模型):负责业务对象与数据库的对象(ORM)。

2)Template(模版):负责如何把页面展示给用户。

3)View(视图):负责业务逻辑,并在适当的时候调用Model和Template,此外Django还有一个 url 分发器,它

的作用是将一个个 URL 的页面请求分发给不同的view处理,view再调用相应的 Model 和 Template。

44.3、django的流程和命令行工具:

1、django实现流程(windows环境):

(1)安装django时要保证如下环境变量(如下环境变量在安装python后就应该被添加的):

(2)安装django:

C:\WINDOWS\system32>pip3 install django==2.2.9

#我这里 django 装的是 2.2.9LTS 版本(长久支持版本),python 装的是 3.7.6 版本。

(3)创建project:

1)进入D盘:

C:\WINDOWS\system32>d:

2)创建mysite项目:

D:\>django-admin startproject mysite

#django-admin是Django的一个用于管理任务的命令行工具。

3)mysite项目的目录结构如下:

----mysite

--------mysite

------------__init__.py

------------settings.py

#配置文件,包含了项目的默认设置,包括数据库信息,调试标

#志以及其他一些工作的变量。

------------urls.py

#URL对应关系,负责把URL模式映射到应用程序。

------------wsgi.py

# 遵循WSIG规范,uwsgi + nginx

--------manage.py

#用于管理Django应用程序,是对django-admin的简单包装,

#每一个Django Project里都会有一个manage.py,通过它可以

#调用django shell和数据库等。

(4)在项目中创建Django应用程序:

1)进如mysite目录:

D:\>cd mysite

2)创建应用程序app01:

D:\mysite>python manage.py startapp app01

3)应用程序app01目录如下:

----app01

--------migrations

#数据修改表结构

------------_init_.py

--------_init_.py

--------admin.py

#Django为我们提供的后台管理

--------apps.py

#配置当前app

--------models.py

#ORM,写指定的类,通过命令可以创建数据库结构

--------tests.py

#单元测试

--------views.py

#业务代码

(5)settings文件配置:

1)添加创建的程序app01:

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'app01',

]

2)在mysite项目下创建存放模板文件的"templates"目录和存放静态文件的"static"目录。

3)添加存放模板文件"templates"目录的路径:

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',

],

},

},

]

4)添加存放静态文件"static"目录的路径(静态文件指的是css、js、images文件):

STATIC_URL = '/static/'

#引用名,主要由项目内部模板文件调用。好处是:存放静态文件真实目录的更改

#不会影响前端的引入,避免造成前端大量修改。

STATICFILES_DIRS = (

os.path.join(BASE_DIR, 'static'),

)

#实际名,即实际文件夹的名字,static 文件夹写在 app01 下,静态文件的调用 os.path.join(BASE_DIR,'app01','static'),。

#注意:上面的配置必须在"os.path.join(BASE_DIR,'static')"后加",",代表元组分割,否则会报错。

#django 对引用名和实际名进行映射,引用时只能按照引用名来,不能按实际名去找。

#在模板中调用静态文件的方法有如下两种:

#第一种:<script type="text/javascript" src="/static/jquery-3.1.1.js"></script>

#第二种:

#{% load staticfiles %}

#放到head标签中

#<script type="text/javascript" src={% static "jquery-3.1.1.js" %}></script>

5)添加django启动时允许被访问的本地ip列表的配置:

ALLOWED_HOSTS = ['127.0.0.1']

#如果不配置默认是[],那么只有本地(127.0.0.1)能够访问django。

#"*"代表本地所有的ip地址,也可以根据需求写成"ALLOWED_HOSTS = ['192.168.0.212','127.0.0.1','192.168.2.212']"。

#如果启动django时绑定的ip地址不在"ALLOWED_HOSTS"配置列表中,则django无法被远程客户端访问。

(6)启动项目:

D:\mysite>python manage.py runserver 127.0.0.1:8080

说明:

python manage.py runserver

#以"127.0.0.1:8000"ip和端口启动django。

python manage.py runserver 8080

#以"127.0.0.1:8080"ip和端口启动django。

python manage.py runserver 192.168.0.212:8080

#以"192.168.0.212:8080"ip和端口启动django。

python manage.py runserver 0.0.0.0:8080

#以本地所有ip地址和8080端口启动django。

(7)在浏览器进行验证:

提示:在django启动后修改代码,django会自动重启。

(8)补充:

1)以上创建django项目及应用程序的过程需要使用命令,代码书写也比较麻烦,我们可以使用pycharm来创建django项目及项目

中的应用程序,可以有效的提高开发的效率。

2)在pycharm中配置Django项目:

A、创建Django项目:

B、按上面的"(5)settings文件配置:"步骤对settings文件进行配置。

C、项目选择、启动、及设置按钮:

D、设置项目的启动的ip及端口号:

2、django的命令行工具:

(1)在终端任意目录下运行:

1)查询某个命令的详细信息:

django-admin help startapp

(2)在项目的目录下运行:

1)启动交互界面:

python manage.py shell

#这个命令和直接运行 python 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,

#对于操作数据,还有一些小测试非常方便。

2)终端上输入python manage.py 可以看到详细的列表,在忘记子名称的时候特别有用。

3)同步数据库:

python manage.py makemigrations

#生成同步数据库的脚本

python manage.py migrate

#同步数据库

注意:在开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个简单粗暴

方法是把migrations目录下的脚本,除 __init__.py 之外全部删掉,再把数据库删掉之后创建一个新的数据库,数据

库同步操作再重新做一遍。

使用python manage.py migrate生成的表删除后无法进行生成了,除非删除库后重建。

4)刷新数据库,默认为"默认的数据库":

python manage.py flush --database <databasename>

5)创建超级管理员:

python manage.py createsuperuser

说明:密码最少8位字符,其中字母最少两位且错开。

admin 是 Django 自带的一个后台数据库管理系统,访问 http://127.0.0.1:8080/admin/ 如下如图所示:

6)修改用户密码:

python manage.py changepassword <username>

7)导出数据:

python manage.py dumpdata [appname]|[appname.表名称] > [自定义名称].json

#导出的结果在项目下,文件名相同会自动覆盖。

#[appname]:表示导出指定应用程序所有表中的数据。

#[appname.表名称]:表示导出指定应用程序指定表中的数据。

8)导入数据:

python manage.py loaddata <自定义名称>.json

#前提是应用程序中的表必须存在,相同的记录覆盖,没有的记录增加,已存在的记录不变。

#总结就是还原备份的数据,不改变新增的数据。

9)数据库命令行:

python manage.py dbshell

最新文章

  1. iOS 编译时的警告导致无法通过编译
  2. PHP 数组排序
  3. NVIDIA Physix Unity3D
  4. php 工厂模式
  5. 由浅到深讲解C#-LINQ
  6. 这个东西,写C++插件的可以用到。 RapidJSON —— C++ 快速 JSON 解析器和生成器
  7. Server对象的Execute方法
  8. (转)SQL按照日、周、月、年统计数据
  9. IllegalArgumentException 介绍
  10. linux下访问windows的共享
  11. java中的finally用return也挡不住
  12. 2.5、Android Studio添加多适配的向量图片
  13. RCTF 2018线上赛 writeup
  14. python学习 day13 装饰器(一)&amp;推导式
  15. 一步一步安装SQL Server 2017
  16. synchronized和Lock复习
  17. vue页面优化中的v-show和v-if使用比较
  18. [20181130]control file sequential read.txt
  19. C++ 常用设计模式(学习笔记)
  20. unity鼠标滚轮控制摄像机视野的缩放和按住鼠标控制摄像机移动

热门文章

  1. [刷题] PTA 02-线性结构4 Pop Sequence
  2. [OS] 概述&amp;学习资料
  3. curl -O http://www.linux.com/hello.sh
  4. LVM 相关知识
  5. H5开发基础之像素、分辨率、DPI、PPI
  6. Maven知识点一览
  7. shell基础之exit,break,continue
  8. json字符串和字典的区别
  9. Step By Step(C调用Lua)
  10. redis中AOF和RDB的关闭方法