【星海出品】Django入门

2023-11-20

**Django简述 **

blog/
├── blog
│ ├── init.py #空文件
│ ├── settings.py #管理项目的配置信息
│ ├── urls.py #路由,声明请求url的映射关系
│ └── wsgi.py #python程序和web服务器的通信协议
└── manage.py #一个命令行工具,用来和Django项目进行交互

Django采用MVC架构设计的开源的WEB快速开发框架。
优点: 能够快速开发,自带ORM、Template、Form、Auth核心组件
MVC设计模式 实用的管理后台Admin 简洁的url设计 周边插件丰富
缺点:框架重、同步阻塞
所以Django的设计目标就是一款大而全,便于企业快速开发项目的框架,因此企业应用较广。

最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。以下内容简要介绍了如何使用 Django 实现一个数据库驱动的 Web 应用。

Django 无需数据库就可以使用,它提供了 对象关系映射器 通过此技术,你可以使用 Python 代码来描述数据库结构。

你可以使用强大的 数据-模型语句 来描述你的数据模型,这解决了数年以来在数据库模式中的难题。以下是一个简明的例子:

运行 Django 命令行工具来创建数据库表:
$ python manage.py migrate
这个 migrate 命令查找你所有可用的模型并将在数据库中创建那些不存在的表,还可提供了可选的 丰富 schema 控制。
接下来,你就可以使用一套便捷而丰富的 Python API 访问你的数据。这些 API 是即时创建的,而不用显式的生成代码:

MVC简述

我们先对 MVC 设计模式进行介绍,它是 Web 设计模式的经典之作,MTV 模式也是在它的基础上衍生而来。
MVC 是 Model-View-Controller 的缩写,其中每个单词都有其不同的含义:
1.Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
2.View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
3.Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。

MVC 设计模式的请求与响应过程描述如下:
用户通过浏览器向服务器发起 request 请求,Controller 层接受请求后,同时向
Model 层和 View 发送指令; Mole 层根据指令与数据库交互并选择相应业务数据,然后将数据发送给 Controller 层;

View 层接收到 Controller 的指令后,加载用户请求的页面,并将此页面发送给 Controller 层; Controller 层接收到 Model 层和 View 层的数据后,将它们组织成响应格式发送给浏览器,浏览器通过解析后把页面展示出来。

MVC 的 3 层之间紧密相连,但又相互独立,每一层的修改都不会影响其它层,每一层都提供了各自独立的接口供其它层调用,MVC 的设计模式降低了代码之间的耦合性(即关联性),增加了模块的可重用性,这就是 MVC 的设计模式。

WSGI(Web Server Gateway Interface) 概述

主要规定了服务器端和应用程序间的接口。

#返回文本例子
from wsgiref.simple_server import make_server,demo_app
ip ='127.0.0.1'
port = 9999
server = make_server(ip,port,demo_app)# demo_app应用程序,可调用
server.serve_forever() # server.handle_request()执行一次

WSGI框架库往往可以看做增强的更加复杂的Application。
WSGI服务器作用 监听HTTP服务端口(TCPServer,默认端口80) 接收浏览器端的HTTP请求并解析封装成environ环境数据
负责调用应用程序,将environ数据和start_response方法两个实参传入给Application
将应用程序响应的正文封装成HTTP响应报文返回浏览器端

#返回网页的例子
from wsgiref.simple_server import make_server

def application(environ,start_response):
	status ='200 OK'
	headers = [('Content-Type','text/html;charset=utf-8')]
	start_response(status,headers)
	#返回可迭代对象
	html ='<h1>welcome to xinghai bo ke</h1>'.encode("utf-8")
	return [html]

ip ='127.0.0.1'
port = 9999
server = make_server(ip,port,application)
server.serve_forever()# server.handle_request()一次

测试命令

$ curl-I http://192.168.142.1:9999/xxx?id=5
$ curl-X POST http://192.168.142.1:9999/yyy-d'{"x":2}'

ORM模式 Django 与 数据库

Web 开发中对数据库的操作是必不可少的,然而每种数据库的操作方式以及用法不尽相同。由于 Django 中 ORM的存在,为我们操作不同种类的数据库提供了统一的方法,ORM 适配了多种常用的关系型数据库,例如
PostgreSQL、MySQL、Oracle、Sqlite3 等。

其实模型类本质上属于一个 Python 类,只不过在 Django 中称之为做模型类 ,它是由 django.db.models.Model 派生出的子类,在 Django 中模型类是数据交互的接口,一个模型类代表数据库中的一张数据表,模型类中每一个类属性都代表数据表中的一个字段。

ORM 的增删改查称为 CURD 操作,下面列举几个常用语句:
UserInfo.objects.all()#查询表中的所有记录
UserInfo.objects.filter(name_contains=‘j’)#查询表中name含有“j”的所有记录,被使用较多
UserInfo.objects.get(name=“john”)#有且只有一个查询结果,如果超出一个或者没有,则抛出异常
UserInfo.objects.get(name=“john”).delete()#删除名字为john的记录
UserInfo.objects.get(name=“john”).update(name=‘TOM’)#更新数据表的name为TOM

ORM 模块确实有诸多的优势,比如:
使用该模块只需要面向对象编程,不需要面向数据库编写代码,对数据库的操作转换为对类属性和方法的操作,不用我们编写各种数据库的 SQL 语句。
实现数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异化,不在关注不同数据库内部的操作细节,通过简单更改配置就可以实现数据库的更换而无需更改代码。

Django安装

$ pip install django==<version>
$ django-admin--version
$ django-admin

Django 原生的auth功能

新建一张 auth_user 用户表,并为此表添加一个新用户 user。首先用如下方式引入 auth模块的 User 方法:

from django.contrib.auth.models import User
user=User.objects.create_user(username='test1',password='123456',email='test@123')
save()#调用该方法保存数据 
user.set_password(password='12345abc')#会对原密码进行修改

还有认证服务等诸多原生函数,可自行查看

Django 项目的创建

$ django-admin startproject blog .
#该命令代表创建了Django的初始文件,最后的 . 代表当前目录
$tree
├─ manage.py
└─ blog
    ├─  settings.py
    ├─  urls.py
    ├─  wsgi.py
    └─  __init__.py

manage.py:本项目管理的命令行工具。应用创建、数据库迁移等都使用它完成
blog/settings.py:本项目的核心配置文件。数据库、中间件、模板等
blog/urls.py:URL路径映射配置。项目初始,只配置了/admin的路由。
blog/wsgi:定义WSGI接口信息。部署用,一般无需改动。

创建一个名为app_demo的应用, 在终端项目目录下执行
python3 manage.py startapp app_demo
├── app_demo
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py

app_demo目录结构 admin:对应应用后台管理配置文件
apps:对应应用的配置文件
models:数据模块,用于设计数据库等
tests:编写测试脚本
views:视图层,直接和浏览器进行交互
每次新建一个App我们需要将其在settings.py文件中的INSTALLED_APPS里进行注册,这样程序才能够找到这个服务

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app_demo', # 注册新创建的应用app
]
#打开app_demo目录下的view.py, 开始coding 配置第一个网页
from django.http import HttpResponse

def msg(request, name, age):
    return HttpResponse('My name is ' + name , 'hello world')

这里需要配置两个URL,第一个是blog总项目的映射,admin是给定的官方默认保留的管理员管理连接。
hello指的是访问网页的 url 对应的视图函数
例如:http://localhost:8000/hello/
对应的是 app_demo.urls <指向了建立新项目的urls文件,追踪下面的视图函数>

#blog_url
# 在url中写入URL来进行 前端地址到app_demo,view函数的映射
# 导入url模块
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^hello/$', app_demo.urls)
]

代表的是hello开头的导入进来的所有匹配项都直接使用 视图函数 views.hello 渲染返回

#demo_app_urls
from django.conf.urls import url
urlpatterns = [
	url(r'^$', views.hello)
]

在urlpatterns中加入url(‘hello/’, views.hello),第一个元素是匹配的字符串,第二个元素为相对应的视图模块。

也就是告诉django所有url/hello/ 的请求都是指向了views.hello
这个视图。hello前不需要加’/‘,因为域名的末尾一定会有’/‘。其中’^‘为严格前匹配,’,浏览器输入http://localhost:8000/hello/a/b
也是可以访问view.hello视图

数据库配置

使用数据库,需要修改默认的数据库配置。
在主项目的settings.py下的DATABASES。默认使用的sqlite,修改为mysql。

DATABASES = {
	'default': {	
		'ENGINE':'django.db.backends.mysql',
		'NAME':'blog',
		'USER':'xinghai',
		'PASSWORD':'123456',
		'HOST':'192.168.0.128',
		'PORT':'3306',
    }
}
pip install mysqlclient

创建用户应用

$ python manage.py startapp user

在这里插入图片描述

创建应用后,项目根目录下产生一个user目录,有如下文件:
admin.py:应用后台管理声明文件
models.py:模型层Model类定义
views.py:定义URL响应函数或类
migrations包:数据迁移文件生成目录
apps.py:应用的信息定义文件

在blog/settings.py中,增加user应用。
目的是为了后台管理admin使用,或迁移migrate使用

INSTALLED_APPS = [
	'django.contrib.admin',
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions',
	'django.contrib.messages',
	'django.contrib.staticfiles',
	'app_demo',
	'user',
]

建立django与数据库的表联系
在 /user/models.py 中建立类,对接数据库中的表。
基础原理见: https://editor.csdn.net/md/?articleId=118181661

from django.db  import models

class User(models.Model):
    class Meta:
        db_table = 'user'
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=48,null=False)
    email = models.CharField(max_length=64,unique=True,null=False)
    password = models.CharField(max_length=128,null=False)

    def __repr__(self):
        return '<user {} {}>'.format(self.id, self.name)

    __str__ =__repr__

Django后台管理
1、创建管理员

$ manage.py createsuperuser
Username (leave blank to use'wayne'):admin
Email address:
Password:
Password (again):
Superuser created successfully.

启动 WEB Server

python manage.py runserver

后台登录地址
http://127.0.0.1:8000/admin

在user应用的admin.py添加

from django.contrib import admin
from .modelsimportUser
# Register your models here.
admin.site.register(User)#注册
#user就可以在后台进行增删改了。

小型的django应用见:

https://blog.csdn.net/qq_47828130/article/details/121775389

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【星海出品】Django入门 的相关文章

随机推荐

  • 第6天-[21天学Python]-面向对象编程以及类的属性和方法

    本章的主要内容有 对象概述 类与对象 定义与使用类 类的属性与方法 类的继承 类的方法重载 1 面向对象编程 1 1 万物皆对象 程序对现实中的事物进行有目的的抽象 面向对象编程就是通过面向对象分析与设计 建立模型 类或对象 并完成最终程序
  • java代码上传本地图片返回地址

    有时候我也很迷这个到底是怎么上传的 写这篇为了给自己看的 大家可参照 Value constantvalue uploadPath private String uploadPath Value constantvalue hostname
  • 极大似然估计详解

    极大似然估计 以前多次接触过极大似然估计 但一直都不太明白到底什么原理 最近在看贝叶斯分类 对极大似然估计有了新的认识 总结如下 贝叶斯决策 首先来看贝叶斯分类 我们都知道经典的贝叶斯公式 其中 p w 为先验概率 表示每种类别分布的概率
  • 【源码+文档】爬虫检索系统

    实验内容 从Top250电影榜单上爬取所有电影的相关信息 包括影片海报 影片海报链接 影片中外文名 影片评分 影片评价人数 影片概况 影片缩略信息 例如 导演 部分演员 上映时间 电影类型等等 将海报以 jpg形式 将其他信息以excel文
  • 游戏币java_Java实现蓝桥杯分金币

    分金币 圆桌旁坐着n个人 每人有一定数量的金币 金币总数能被n整除 每个人可以给他左右相邻的人一些金币 最终使得每个人的金币数目相等 你的任务是求出被转手的金币数量的最小值 比如 n 4 且4个人的金币数量分别为1 2 5 4时 只需转移4
  • 【Antlr】ANTLR语法规则

    1 概述 ANTLR语法规则的主要工作是定义词法解析规则和语法解析规则 ANTLR约定词法解析规则以大写字母开头 语法解析规则以小写字母开头 下面简单介绍一下ANTLR的规则 首先需要定义Grammar类型及名称 名称必须和文件名一样 有L
  • 每日一题 337. 打家劫舍 III

    难度 中等 整体思路相当于是前两天的方法倒过来 毕竟二叉树最常用的解法就是递归倒推 对于每一颗子树 他必定有一种最大的盗取方法 但是只有它的 root 的盗取情况才会影响到 root 的父节点 即如果收益最大的盗取方法中不盗取 root 那
  • anaconda 2023.3 win10 安装,镜像配置,存储路径更改超详细教程

    现在 ai 很火 做 ai 开发 离不开 python anaconda 是 python 开发的重要工具 这里介绍一下 anaconda 最新版的 2023 3 在 win10 的安装 镜像配置 以及虚拟环境存储路径的更改 1 anaco
  • (48.4)【WAF绕过】SQL注入、文件上传、XSS

    目录 一 SQL注入绕过 二 文件上传绕过 三 xss绕过 一 SQL注入绕过 WAF绕过基础分析和原理 注入绕过WAF方法分析https blog csdn net qq 53079406 article details 12314769
  • 深度学习2015年文章整理(CVPR2015)

    国内外从事计算机视觉和图像处理相关领域的著名学者都以在三大顶级会议 ICCV CVPR和ECCV 上发表论文为荣 其影响力远胜于一般SCI期刊论文 这三大顶级学术会议论文也引领着未来的研究趋势 CVPR是主要的计算机视觉会议 可以把它看作是
  • 【JavaWeb】 练习二

    1 gt 实现登录 如果用户名密码错误 转入到登录页面 提示信息 用户名密码错误 2 gt 如果用户不登录 直接访问展示页面 也需要转入到登录页面 提示信息 请先登录在访问 3 gt 实现退出功能 转到登录页面 4 gt 统计查看展示页面的
  • 必杀VI、VIM编辑器命令

    题记 VI和VIM有非常多的命令 在此分部分展示一下 第一部分 一 移动光标类 一般模式 光标移动 复制粘贴 查找替换 上下移动 h lt 光标向左移动一个字符 j 向上箭头 光标向上移动一个字符 k 向下箭头 光标向下移动一个字符 l 向
  • Go_接口、多态、接口继承、空接口、类型断言

    接口 接口是把所有具有共性的方法定义在一起 是方法集 任何类型实现了接口中所有的方法 就是实现了这个接口 接口可以实现多态 接口传递的是地址值 接口定义及调用 定义格式 tepe 接口名 interface 方法名 参数 返回值 调用格式1
  • (超全面,超基础)Kriging插值推导理论笔记,算法,普通克里金

    最近老师让我再重新推导一下克里金插值的方法如何求出预测结果 于是我又无数次地打开了大神的推导原理过程链接 克里金 Kriging 插值的原理与公式推导 作者 xg1990 但是不可避免地在推导过程中 数学知识基础薄弱的我卡住在一些公式推导的
  • 【有奖调研】HarmonyOS新物种,鸿蒙流量新阵地——元服务邀你来答题!

    聊技术无话不谈 一起来吹吹元服务 畅聊你对元服务的想法 说不定 你就能撬动元服务的爆发增长 元服务 即原子化服务 是华为 轻量化 服务的新物种 可提供全新的服务和交互方式 让应用化繁为简 让服务触手可及 基于鸿蒙万能卡片 元服务可实现应用功
  • 数据同步算法研究

    数据同步算法研究 1 引言 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍 比如远程数据镜像 备份 复制 同步 数据下载 上传 共享等等 最为简单的做法自然就是对数据进行完全复制 然而 数据在网络上来回被复制多次后就会存在大量
  • mysql connect 5.6_mysql5,mysql5.6,mysql5.7,mysql8设置autoReconnect=true解决连接数据库超时问m...

    1 问题现象 com mysql jdbc CommunicationsException The last packet successfully received from the server was58129 seconds ago
  • Windows下面Clang的调试方法

    虽然我们使用了Clang工具进行编译 但是我们依旧可以使用Visual Studio进行调试 方法如下 首先 我们需要将编译分为两个步骤 先在CMD使用clang进行obj的生成 也就是编译 clang cl c Z7 o helloeng
  • 8.8数据结构作业

    进制转换 int stack zhuanhuan Stackptr S datatype e if NULL S printf 转换失败 n return 0 datatype x 0 while e gt 0 x e 2 stack pu
  • 【星海出品】Django入门

    Django简述 blog blog init py 空文件 settings py 管理项目的配置信息 urls py 路由 声明请求url的映射关系 wsgi py python程序和web服务器的通信协议 manage py 一个命令