Django笔记01-基础:一个完美主义的web框架

浅谈Web框架

一,什么是框架?

软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,

框架的功能类似于基础设施,提供并实现最为基础的软件架构和体系

通常情况下我们依据框架来实现更为复杂的业务程序开发

一个字,框架就是程序的骨架

二,框架的优缺点

可重用

成熟,稳健

可扩展性良好

选对框架很重要

三,python中常见的框架

大包大揽 Django 被官方称之为完美主义者的Web框架。

力求精简 web.pyTornado

新生代微框架 FlaskBottle

MVC设计模式

MVC实现了前后端和数据的分离,程序的解耦合,实现了程序的可扩展性,可维护性

英文中文针对部分作用
Model模型是针对数据库层面的程序调用模型,直接操作继承model的模型对象
View视图是针对用户界面的数据显示模板(hmtl)
Controller控制器针对业务逻辑的操作python程序

MVT

MModel模型数据层
VView视图业务逻辑
TTemplate模板html

起步

1. 认识Django

Django是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。
由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需重新创建轮子。
它是免费的和开源的。
被官方称之为完美主义者的Web框架。
Django可以更快地构建更好的Web应用程序并减少代码。

官方网址:https://www.djangoproject.com/

中文文档:http://python.usyiyi.cn/

2. Django框架的特点:

快速开发:Django的宗旨在于帮助开发人员快速从概念到完成应用程序。
安全可靠:Django认真对待安全性,帮助开发人员避免许多常见的安全错误。
超可伸缩性: Web上的一些最繁忙的网站利用了Django快速灵活扩展的能力。

3. Django可以使用什么Python版本?

Django版本Python版本
1.82.7,3.2(直到2016年底),3.3, 3.4, 3.5
1.9, 1.102.7, 3.4, 3.5
1.112.7 , 3.4 , 3.5 , 3.6
2.03.5+

4. Django的开发版本

LTS : 长期稳定版

  • 2015 April 1.8
  • 2017 April 1.11
  • 2019 April 2.2

5. Django安装

作为Python Web框架,Django需要Python,在安装Python同时需要安装pip。

# 在线安装Django
pip3 install Django
# 检测当前是否安装Django及版本
python3 -m django --version
1.11.7

这里可以使用 -i 参数来指定镜像源位置

6. 使用Django框架搭建项目

# 在一个目录中执行一下命令,就会创建一个web项目目录
django-admin startproject web# 进入到web文件夹中,执行以下命令,启动项目
python3 manage.py runserver# 接下来就可以在浏览器中访问了

Django入门

创建一个应用

python3 manage.py startapp home# 以上命令会在项目文件夹中创建一个目录home

请求的流程

用户输入url地址发起请求,服务器接受到请求后,交给跟路由(项目同名目录下的urls.py)

使用模板文件

URLconf路由

路由的定义

URL ==> 统一资源定位符
指得就是请求的(URL)地址
http://python.itxdl.cn/html/tutorial/
http://python.itxdl.cn/html/teachers/
可以在项目中指定请求的url地址,来交给对应的试图函数进行解析

路由的特点

路由就是在urls中进行规则的配置
按照从上往下的顺序来执行
如果匹配到,则假装指定的视图函数来执行
如果匹配不到,则抛出404 page not found

路由参数

路由参数就是在定义规则时,使用小括号()括起来的内容,将作为参数传递给视图函数

# 路由规则
url(r'^article/(\d)$', views.article),
# 视图函数
def article(request,para):return HttpResponse('接受到的参数是:'+para)

命名组,命名参数

和路由参数一样是用来获取url中路径作为参数来使用
不同的是,命名组会把当前参数作为,关键字参数传递给视图函数,
因此对应的视图函数,必须有关键字参数

# 命名组 使用?P<变量名>方式来定义
url(r'abc/(?P<aa>[0-9]+/$',view.abc_2003)# 在对应的视图函数中则必须有对应的关键字
def abc_2003(request,aa):print(aa)return HttpResponse('abc_2003')

指定用于视图参数的默认值

两个路由指向同一个视图函数

# 路由
url(r'^user/index/(?P<page>[0-9]+)/$', views.user_index),
url(r'^user/index/$', views.user_index),# 视图函数
def user_index(request,page=1):print(page)return HttpResponse('用户列表数据的显示'+page)    

Model模型

数据库配置

  1. 安装mysql
  2. 创建库,指定字符集
  3. 安装pymysql
  4. 在settings.py的同级目录中找到__init__.py文件,声明pymysql
  5. 在settings.py文件中配置 数据库
  6. 在settings.py文件中添加当前的应用

定义模型

在模型中定义属性,会生成表中的字段
django会为表增加自动增长的主键列,每个模型只能有一个主键列
如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列
属性命名限制

不能是python的保留关键字
由于django的查询方式,不允许使用连续的下划线

定义步骤

  1. 找到应用中的models.py文件
from django.db import models# Create your models here.
# 模型的作用,降低程序的耦合性,更换数据库就改个配置文件就行了class Users(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)email = models.CharField(max_length=50)
  1. 生成迁移文件
python3 manage.py makemigrations
  1. 执行迁移
python3 manage.py makemigrate

View视图

Django中的视图

Django具有“视图”的概念来封装负责处理用户请求和返回响应的逻辑

视图函数或视图简而言之就是一个Python函数,它接受一个Web请求并返回一个Web响应

此响应可以是网页的HTML内容,重定向或404错误,XML文档或图像。

为了将代码放在某处,惯例是将视图views.py放在名为的文件中,放在项目或应用程序目录中

在视图函数中使用模型

  1. 先在视图函数中导入models
from . import models
# 模型的操作演示
def mod_demo(request):# 使用模型进行操作数据库 数据的查询操作res = models.Users.objects.all()print(res)# < QuerySet[ < Users: Users object >] ># 一个查询集for x in res:print(x.username)return HttpResponse('模型你给的操作演示')

url 统一资源定位符

http://127.0.0.1:8000/user/abc?a=1&b=2
协议:http https file svn
ip或域名 127.0.0.1 www.itxdl.cn
端口: 80 443 8000 5000 8080
路径: /user/abc
参数: ?a=1&b=2

模型的操作

# 1查询
# 获取当前模型中所有的对象数据
# 结果为一个查询集
obs = models.Stu.objects.all()
# 根据id获取当前对象 结果 对象
ob = models.Stu.objects.get(id=1)
# 注意:get方法能且只能返回一个对象
# 查多个报错,查不到也报错# 2添加
# 第一中方法 
data = {'name':'admin','age',20}
ob = models.Stu(**data)
ob.save()
# 第二种方法
ob = models.Stu()
ob.name = 'zhangsan'
ob.age = 20
ob.save()# 推荐第一种                
# 3删除
# 获取对象.执行删除
ob.delete())# 4更新
ob.name = 'aabb'
ob.save())  

增删改查

用户管理

先定义一个视图函数 显示添加表单
表单吧数据提交到 执行数据添加的函数中
完成后跳转到 用户列表的视图函数中
删除链接提交到 一个执行用户删除的视图函数中k,完成后跳转列表页面
编辑链接提交到 一个显示用户数据的修改表单中
修改表单吧数据 提交到执行数据更新的视图函数中

这6个步骤对应6个路由

# 用户数据的管理
url(r'stu/index$',views.stu_index,name='stu_index'),
# 执行用户的添加
url(r'stu/insert$',views.stu_insert,name='stu_insert'),
# 显示添加的表单
url(r'stu/add$',views.stu_add,name='stu_add'),
# 执行用户的删除
url(r'stu/del$',views.stu_del,name='stu_del'),
# 用户的编辑表单
url(r'stu/edit$',views.stu_edit,name='stu_edit'),
# 执行用户数据的更新
url(r'stu/update$',views.stu_update,name='stu_update'),

生成迁移文件时,还没有吧应用添加到配置文件中?
如果已经生成迁移文件,则直接执行迁移就可以,
另外注意,生成的迁移文件不要轻易删除

模型定义

class User(models.Model):pass

在这里已经说了

模型更改问题

如果模型已经创建好了一个表,你再模型中在增加一个字段,在生成迁移文件的时候就会报出
新增的一个字段时注意,如果当前新增的字段不允许为空,并且没有设置默认值,
则会在生成迁移时

You are trying to add a non-nullable field 'age' to users without a default; we c
an't do that (the database needs something to populate existing rows).
Please select a fix:1) Provide a one-off default now (will be set on all existing rows with a null v
alue for this column)2) Quit, and let me add a default in models.py

翻译过来是:

就是说,你加了一个字段,还说不能为空,然后那我之前还有挺多数据呢,这可咋整啊
您还想添加一个非空字段,还没有默认,是不是傻?选择一个修复吧,赶紧的:1)提供一个一次性的值2)退出,修改当前新增字段1. 设置默认值2. 允许为空

就算你表中没有数据,他也会这样问,以为他傻,他不知道你有没有数据,他也不能知道,也不需要知道

Django学习中遇到的问题(1)django migration No migrations to apply

Template模板

模板概念

作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。

模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。

模板语法

1.变量

  • 变量输出语法{{ var }}

  • 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出

  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成

  • 当模版引擎遇到点("."),会按照下列顺序查询:

    • 字典查询,例如:foo[“bar”]
    • 属性或方法查询,例如:foo.bar
    • 数字索引查询,例如:foo[bar]
  • 如果变量不存在, 模版系统将插入’’ (空字符串)

  • 在模板中调用方法时不能传递参数

2.标签

  • 语法{ % tag % }
  • 作用
    • 在输出中创建文本
    • 控制循环或逻辑
    • 加载外部信息到模板中
for标签
{ %  for ... in ...  % }循环逻辑
{ %  endfor  % }
if标签
{ %  if ...  % }逻辑1
{ %  elif ...  % }逻辑2
{ %  else  % }逻辑3
{ %  endif  % }
comment标签
{ %  comment  % }多行注释
{ %  endcomment  % }
include:加载模板并以标签内的参数渲染
{ %  include "base/index.html"  % }
url:反向解析
{ %  url 'name' p1 p2  % }
csrf_token:这个标签用于跨站请求伪造保护
{ %  csrf_token  % }

Django框架自带的后台

  1. 在浏览器访问 admin
    http://127.0.0.1:8000/admin/

  2. 需要登录,因此要创建一个超级用户
    在命令行执行下一个命令进行创建
    python3 manage.py createsuperuser

  3. 重新启动服务后 ,使用创建的用户进行后台的登录

  4. 配置settings.py文件,配置语言和时区

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql存储引擎的一点学习心得总结

首先我们应该了解mysql中的一个重要特性——插件式存储引擎&#xff0c;从名字就能够看出在mysql中&#xff0c;用户能够依据自己的需求随意的选择存储引擎。实际上也是这样。即使在同一个数据库中。不同的表也能够使用不同的存储引擎。Mysql中支持的存储引擎有非常多种&#x…

常见音视频格式(转载)

Contents 1 MPEG 系列 1.1 MPEG-1 1.2 MPEG-2 1.3 MPEG-4 1.4 MPEG-4 AVC 1.5 MPEG Audio Layer 1/2 1.6 MPEG Audio Layer 3 1.7 MPEG-2 AAC 1.8 MPEG-4 AAC 1.9 MPEG-4 aacPlus 1.10 MPEG-4 VQF 1.11 mp3PRO 1.12 MP3 Surround 2 DVD系列 2.1 Dolby Digital AC3 2.2 Dolby D…

编程语言难度排名_谷歌排名第一的编程语言,小学生拿来做答题,分分钟钟搞定高难度算法!...

点击上方蓝色文字关注我们吧谷歌排名第一的编程语言时什么&#xff1f;毫无疑问&#xff1a;肯定是 Python。 也难怪&#xff0c;作为大数据时代和人工智能时代的必备语言&#xff0c;Python 的优点太多了&#xff0c;语言简洁、易学、开发效率高、可移植性强...... 另外&#…

poj 2484 A Funny Game

题目&#xff1a;http://poj.org/problem?id2484 一&#xff0c;题意&#xff1a; n个硬币围成一个圈&#xff0c;Alice与Bob轮流从圈中取硬币。每次能够取一枚或者连续的两枚。 硬币取走后留下的空位不用填补&#xff0c;空位相隔的两个硬币视为不相邻。Alice第一个開始取。 …

58到家MySQL军规升级版

一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8&#xff0c;必要时候使用utf8mb4 解读&#xff1a; &#xff08;1&#xff09;通用&#xff0c;无乱码风险&#xff0c;汉字3字节&#xff0c;英文1字节 &#xff08;2&#xff09;utf8mb4是utf8的超集&#…

jsp 中包含 一个路径为变量的文件

<head><base href"<%basePath%>"><% String fileroot"MyJsp.jsp"; %> </head><body><jsp:include page"<%fileroot %>" ></jsp:include></body>

FFMPEG中H.264的算法文档--整理自ffmpeg论坛等

xchg_mb_border() 交换 MB 边界的像素。阅读代码可知&#xff0c;交换双方为边界缓存 (left_border,top_borders) 与重建图象中的相应数据。其中 xchg 参数是否为 1 决定&#xff0c;在从边界缓存赋值到重建图象的同时&#xff0c;是否保存重建图象的数据到边界缓存。 此函数仅…

python局部静态变量_全局变量、局部变量和静态变量

全局变量和局部变量在写代码时需要区分清楚&#xff0c;不然会出大问题。不同语言定义不同范围的变量的写法有很大的区别。那么静态变量是在什么场景下用到呢&#xff1f;我们来假设这样一个场景&#xff1a;在函数内部定义的变量&#xff0c;当程序执行到它的定义处时&#xf…

【转载】fullpage.js学习

参考网址&#xff1a;http://www.dowebok.com/77.html 上面有详细介绍及案例展示&#xff0c;很不错哦&#xff0c;可以先去看看demo 一、简介 fullPage.js 是一个基于jQuery的插件&#xff0c;它能够很方便、很轻松的制作出全屏网站&#xff0c;主要功能有&#xff1a; 1.支持…

Deepin 下安装 LAMP

ubuntu/deepin linux 下使用 apt-get 安装所需套的软件 LAMP 1. 安装 apacache2 apt-get install apache2 配置文件&#xff1a;/etc/apache2/apache2.conf service apache2 start service apache2 stop service apache2 restart 2. 安装 mysql sudo apt-get install my…

webpack打包测试_webpack入门笔记(一)

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时&#xff0c;它会递归地构建一个依赖关系图(dependency graph)&#xff0c;其中包含应用程序需要的每个模块&#xff0c;然后将所有这些模块打包成一个或多个 bundle。webp…

[js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展字符串位置方法(4)

本文&#xff0c;我们接着之前的框架继续扩展&#xff0c;这次扩展了一共有5个与字符串位置相关的方法 between( left, right ) 返回两个字符串之间的内容&#xff0c; 如果第二个参数没有传递&#xff0c;返回的是找到的第一个参数 之后 到 字符串结尾的所有字符串 如果第二个…

ffmpeg和SDL学习笔记

根据ffmpeg官方网站上的例子程序开始学习ffmpeg和SDL编程。 SDL是一个跨平台的多媒体开发包。适用于游戏&#xff0c;模拟器&#xff0c;播放器等应用软件开发。支持linux 、win32 等操作系统。 主要应用&#xff1a; 视频 设置8bpp或更高的任意色彩深度的视频模式。如果某个…

百练-16年9月推免-B题-字符串判等

2743:字符串判等 查看提交统计提示提问总时间限制: 1000ms内存限制: 65536kB描述判断两个由大小写字母和空格组成的字符串在忽略大小写&#xff0c;且忽略空格后是否相等。 输入两行&#xff0c;每行包含一个字符串。输出若两个字符串相等&#xff0c;输出YES&#xff0c;否则输…

mysql中的内置函数

mysql内置函数列表可以从mysql官方文档查询&#xff0c;这里仅分类简单介绍一些可能会用到的函数。 1 数学函数 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1间的浮点数&#xff0c;使用不同的seed N可以获得不同的随机数 round(x, D)&#xff…

待整理

CNN 适合处理图片类输入数据&#xff0c;单独的&#xff0c;数据之间没有关系。 rnn则适合处理序列类数据&#xff0c;视频帧&#xff0c;语言。 深度神经网络一般指隐藏层大于2的神经网络。深层网络相对于浅层网络&#xff0c;表达能力更强。仅有一个隐藏层的神经网络就能拟合…

希尔伯特变换_学习笔记1-傅里叶变换1

最终目标是解微分方程。第一章首先介绍了一般意义下的傅里叶变换&#xff0c;之后逐渐将傅里叶变换的概念抽象化&#xff0c;将变换的定义域进行拓展。最后少量介绍傅里叶变换在偏微分方程中的应用。习题解答是自己写的&#xff0c;有的不会&#xff0c;有的不知道对不对。傅里…

使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)

摘要&#xff1a;首先这个Decorator解释一下这个单词&#xff1a;“装饰器”&#xff0c;我觉得其实可以这样理解&#xff0c;他就像我们用到的Frame&#xff0c;他把每个页面共有的东西提炼了出来&#xff0c;也可能我们也会用各种各样的include标签&#xff0c;将我们的常用页…

FFPLAY的原理(一)

概要电影文件有很多基本的组成部分。首先&#xff0c;文件本身被称为容器Container&#xff0c;容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接着&#xff0c;你有一组流&#xff0c;例如&#xff0c;你经常有的是一个音频流和一个视频流。&…

安卓开发 新浪微博share接口实现发带本地图片的微博

1.微博share接口 在开始之前&#xff0c;我们先看一下要用到的这个接口&#xff1a; 我们这次是要上传本地图片&#xff0c;可以很明确的知道&#xff0c;除了要用POST方式提交请求&#xff0c;还要采用multipart/form-data编码方式。 那么这个multipart/form-data编码方式是什…