Python 小试牛刀,Django详细解读,让你更快的掌握它!!!

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Python 小试牛刀,Django详细解读,让你更快的掌握它!!!一、MVC和MTV模式MVC:将web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。

Python 小试牛刀,Django详细解读,让你更快的掌握它!!!
一、MVC和MTV模式
MVC:将web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。

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

Django的MTV模型本质上与MVC没有什么差别,也是各组件之间为了保持松耦合关系,只不过定义上有些不同,Django的MTV分别是:

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

  • Template(模板):负责如何把页面展示给用户

  • View(视图):负责业务逻辑,并在适当的时候调用Model和Template

二 Django的流程和命令行工具
命令行创建
文件介绍:

• manage.py --- Django项目里面的工具,通过它可以调用django shell和数据库等

• settings.py --- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。

• urls.py --- 负责把url模式映射到应用程序

  • 生成同步数据库的脚本:python manage.py makemigrations

    同步数据库:python manage.py migrate

注:开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个粗暴方法是将migrations目录下的脚本(除了__init__.py之外)全部删掉,再把数据库删掉之后创建一个新的数据库,数据库同步操作再重新做一遍。

-- 访问http://127.0.0.1:8000/admin/login/?next=/admin/时,需要为进入这个项目后台创建超级管理员:python manage.py createsuperuser,设置好账户密码就可以登陆

-- 清空数据库:python manage.py flush

-- 查询某个命令的详细信息:django-admin.py help startapp

-- 启动交互界面:python manage.py shell(和直接运行python进入shell的区别是:你可以在这个shell里面调用当前项目的models.py中的API,对于操作数据,还有一些小测试非常方便)

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

提交数据并展示
提交数据并展示(数据库)
三 Django URL(路由系统)
  URL配置(URLconf)就像Django所支持网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

1 urlpatterns = [
2 url(正则表达式,views视图函数,参数,别名),
3 ]
示例
四 Django Views(视图函数)

Http请求中产生两个核心对象:

  http请求:HttpRequest对象

  http响应:HttpResponse对象

HttpResponse对象的属性和方法
注:常用request.POST.getlist('')

  对于HttpReques对象来说,是由django自动创建的。但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。

  HttpResponse类在django.http.HttpResponse

1 HttpResponse对象上扩展的常用方法:
2
3 页面渲染: render() render_to_response()
4 页面跳转: redirect("路径")
5 locals():可以直接将函数中所有的变量传给模板
五 Template基础
模板语法

  • 模板的组成

1 HTML代码+逻辑控制代码

  • 逻辑控制代码的组成

  1、变量(使用双大括号来引用变量)

1 格式: {{ var_name }}
---------Template和Context对象

  Django模板解析非常便捷。大部分的解析工作都是在后台通过对简短正则表达式一次性调用来完成。相比于XML的模板引擎形成鲜明对比,那些引擎承担了XML解析器的开销,且往往比Django模板渲染引擎要慢的多。

推荐
---------深度变量的查找(万能的句点号)

  以上的例子中,通过context传递的简单参数值主要是字符串,然而,模板系统能够非常简洁地处理更加复杂的数据结构,如:list、dictionary和自定义的对象。

  Django模板中遍历复杂数据结构的关键是句点字符(.)。

View Code
---------变量的过滤器(filter)的使用

1 格式: {{obj|filter:param}}
View Code
  2、标签(tag)的使用(使用大括号和百分比的组合来表示使用tag)

1 {%tags%}
---------{% if %} 的使用

  {% if %}标签计算一个变量值,如果是"true",即它不存在、不为空并且不是false的boolean值,系统则会显示{% if %}和{% endif %}间的所有内容

View Code
---------{% for %} 的使用

   {% for %}标签允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有哦内容

View Code
---------{% csrf_token%}:csrf_token标签

  用于生成csrf_token的标签,用于防治跨站攻击验证。注:若在view的index里用的是render_to_response方法,不会生效

  这里生成一个input标签,和其他表单标签一起提交给 后台

---------{% url %}:引用路由配置的地址

View Code
---------{% with %}:用更简单的变量名替代复杂的变量名

1 {% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}
---------{% verbatim%}:禁止render

1 {% verbatim %}
2 {{ hello }}
3 {% endverbatim %}
---------{% load%}:加载标签库

  3、自定义filter和simple_tag

    a.在app中创建templatetags模块(必须的)

    b.创建任意.py文件,如:my_tags.py

View Code
    c.在使用自定义simple_tag和filter的html文件中导入之间创建的 my_tags.py:{% load my_tags.py %}

    d.使用simple_tag和filter

View Code
    e.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag

View Code
注:filter可以用在if等语句后,simple_tag不可以

  4、extend模板继承

---------include 模板标签

  {% include %}:该标签允许在(模块中)包含其它的模板的内容。标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。每当在多个模板中出现相同的代码时,就应该考虑是否要使用{% include %}来减少重复。

---------extend(继承)模板标签

  在实际应用中,将用Django模板系统来创建整个HTML页面。这就带来一个常见Web开发问题:在整个网站中,如何减少共用页面区域(如站点导航)所引起的重复和冗余代码?

  解决该问题的传统做法是使用 服务器端的includes,可以在HTML页面中使用该制定将一个网页嵌入到另一个中。事实上,Django通过上面的{% include %}支持这种方式。但是用Django解决此类问题的首选方法是使用更加优雅的策略----模板继承。

  本质上来说,模板继承就是先构造一个基础框架模板,而后在其子模版中对它所包含站点公用部分和定义块进行重载。

  第一步:定义基础模板,该框架将由子模板所继承

View Code
  以上定义了一个简单的HTML框架文档,将在本站点的所有页面中使用。子模板的作用就是重载、添加或保留那些块的内容。

  所有的{% block %}标签告诉模板引擎,子模板可以重载这些部分。每个{% block %}标签所要做的是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖。

View Code
View Code
  这样一来,每个模板只包含对自己而言独一无二的代码。无需多余的部分。如果想进行站点级的设计修改,仅需修改基础模板即可,所有其他模板都会被修改。

六 Models
数据库配置

1、django默认支持sqlite,mysql,oracle,postgresql数据库。

  a.sqlite

    django默认使用sqlite的数据库,默认自带sqlite的数据库驱动,引擎名称:django.db.backends.sqlite3

  b.mysql

    引擎名称:django.db.backends.mysql

2、mysql驱动程序

  a.MySQLdb(mysql python)

  b.mysqlclient

  c.MySQL

  d.PyMySQL(纯python的mysql驱动程序)

3、在django的项目中会默认使用sqlite数据库,在settings有如下配置:

复制代码
1 DATABASES = {
2
3 'default': {
4
5 'ENGINE': 'django.db.backends.mysql',
6
7 'NAME': 'books', #你的数据库名称
8
9 'USER': 'root', #你的数据库用户名
10
11 'PASSWORD': '', #你的数据库密码
12
13 'HOST': '', #你的数据库主机,留空默认为localhost
14
15 'PORT': '3306', #你的数据库端口
16
17 }
18
19 }
复制代码
注意!!!
ORM(对象关系映射)
  用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作。

优点:

  1、ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句。快速开发,由此而来的。

  2、可以避免一些新手程序员写SQL语句带来的性能问题。

缺点:

  1、性能有所牺牲,不过现在的各种ORM框架都在尝试各种方法,比如缓存,延迟加载等来减轻这个问题。

  2、对于个别复杂查询,ORM仍然力不从心,为了解决这个问题,ORM一般也支持写raw sql。

  3、通过QuerySet的query属性查询对应操作的sql语句。

1 author_obj=models.Author.objects.filter(id=2)
2 print(author_obj.query)
模型常用的字段类型参数
Field重要参数
表单的添加--> views.py
表单的修改-->views.py
表单的删除-->views.py
表单的查询-->查询API
表单的查询-->补充
View Code
QuerySet的特性
聚合查询和分组查询aggregate(args,*kwargs)
F查询和Q查询
创建表
在settings加上日志记录
注:若创建表失败,请看:https://www.cnblogs.com/chenyanbin/p/10628646.html

七 admin的配置
  admin是Django强大功能之一,它能从数据库中读取数据,呈现在页面中,进行管理。默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用了,但是有时候,一些特殊的功能还需要定制,比如搜索功能。

修改页面字
注册medel类到admin的两种方式
创建Django账号

登陆admin

操作admin

一些常用的设置技巧

  • list_display:指定要显示的字段

  • search_fields:指定搜索的字段

  • list_filter:指定列表过滤器

  • ordering:指定排序字段

复制代码
1 from django.contrib import admin
2 from app01.models import *
3 # Register your models here.
4
5 # @admin.register(Book)#----->单给某个表加一个定制
6 class MyAdmin(admin.ModelAdmin):
7 list_display = ("title","price","publisher")
8 search_fields = ("title","publisher")
9 list_filter = ("publisher",)
10 ordering = ("price",)
11 fieldsets =[
12 (None, {'fields': ['title']}),
13 ('price information', {'fields': ['price',"publisher"], 'classes': ['collapse']}),
14 ]
15
16 admin.site.register(Book,MyAdmin)
17 admin.site.register(Publish)
18 admin.site.register(Author)
复制代码
参考文献:http://www.admin10000.com/document/2220.html
原文地址https://www.cnblogs.com/chenyanbin/p/10514121.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
175 4
|
1月前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
29天前
|
前端开发 JavaScript 数据安全/隐私保护
计算机Python项目|django学生成绩管理系统
计算机Python项目|django学生成绩管理系统
|
26天前
|
存储 JavaScript 前端开发
Python Django下的实现注册验证码
摘要: 使用Python生成随机验证码图像,包括干扰线和噪点,保存到静态文件夹,并将验证码文本存储到数据库。数据库表包含ID、验证码图片路径和验证码文本。JavaScript函数`getRandomInt`生成1到300的随机数,用于请求对应数据库条目的验证码和图片。XMLHttpRequest发送POST请求到服务器,视图函数返回指定ID的验证码图片路径,实现验证码的动态刷新。
|
29天前
|
小程序 前端开发 JavaScript
计算机Python项目|django傣族节日及民间故事推广小程序
计算机Python项目|django傣族节日及民间故事推广小程序
|
1月前
|
SQL 前端开发 关系型数据库
28. Python Web 编程:Django 基础教程
28. Python Web 编程:Django 基础教程
25 2
|
1月前
|
缓存 安全 中间件
Python小白必备!清华大牛整理的《Django零基础入门到精通》手册
Django 是 Python 社区的两大最受欢迎的 Web 框架之一(另一个是 Flask)。凭借功能强大的脚手架和诸多开箱即用的组件,可以使你能够以最小的代价构建和维护高质量的Web应用。 从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。 通过减少重复的代码,Django 使你能够专注于 Web 应用上有趣的关键性的东西。 为了达到这个目标,Django提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。 同时,Django 尝试留下一些方法,来让你根据需要在framework
|
2月前
|
缓存 安全 中间件
Python小白必备!清华大牛整理的《Django零基础入门到精通》手册
Django 是 Python 社区的两大最受欢迎的 Web 框架之一(另一个是 Flask)。凭借功能强大的脚手架和诸多开箱即用的组件,可以使你能够以最小的代价构建和维护高质量的Web应用。 从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。 通过减少重复的代码,Django 使你能够专注于 Web 应用上有趣的关键性的东西。 为了达到这个目标,Django提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。 同时,Django 尝试留下一些方法,来让你根据需要在framework
|
26天前
|
前端开发 数据库 Python
Python Django项目下的分页和筛选查询
在Django中实现分页功能,视图函数通过`Paginator`处理数据,每页显示10条记录。URL配置支持带参数和不带参数的分页请求。前端模板使用for循环展示分页数据,包括商品信息和状态按钮,并利用分页组件导航。筛选查询视图根据GET请求的`state`参数过滤上架或下架产品,同样实现分页功能。前端添加状态选择下拉框,分页链接携带查询参数`state`确保筛选状态在翻页时保持。
|
2月前
|
存储 设计模式 前端开发
Python Django框架总介绍
Python Django框架总介绍
23 0