**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