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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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)
复制代码

原文地址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月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
68 1
|
8天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
84 44
|
9天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
26 2
|
12天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
25 1
|
23天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
21 4
|
25天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
29 1
|
29天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
33 4
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
96 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
87 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)

热门文章

最新文章