目录
本篇文章简单的介绍了Django框架结构以及使用方式,适合第一次尝试使用Django框架但是又不想看官网文档(主要是看起来比较花时间)的读者。
Django框架简述
2005年发布,使用Python编写的开源web框架,早期用于做新闻(如新浪)和内容管理。
Django是重量级的Python Web框架,配备了大部分组件,如:
1.基本配置
2.路由系统
3.原生html模板系统
4.视图view
5.Model模型,数据库连接个ORM数据库管理
6.中间件
7.Cookie &Session
8.自带分页
9.数据库后台管理系统
一般用途
1.网站后端开发
2.微信公众号、微信小程序等后台开发
3.基于HTTP/HTTPS协议的后台服务器开发(在线语音/图形识别/在线第三方身份验证服务器)
相关文档
Django官网:https://www.djangoproject.com/
下载与安装
Django的版本信息如图,LTS代表长期维护,推荐使用1.11和2.2
下载(默认安装最新版):
$ pip install Django
指定版本号(更多版本号信息可去github上查看https://github.com/django/django/releases)
$ pip install Django==2.2.12
使用Django创建项目并使用
1.创建Django项目
格式:django-admin startproject 项目名
提示:windows 系统创建需要打开一个cmd终端并执行该命令
$ django-admin startproject test1
2.执行项目
格式:python manage.py runserver
提示:runserver是一个选项参数,用于启动项目
$ cd test1
$ python manage.py runserver
执行此命令后,终端将显示类似以下信息:
通过浏览器访问红色下划线的url可以访问到Django
如图所示,第一次访问将显示如下信息,右上角是Django的版本号,中间部分有一个DEBUG=True,这说明我们在调试模式(可通过setting.py设置是否进入调试模式)
3.项目结构分析
如果按照上文的步骤进行,将会看到如下项目结构:
下面简单概述一下各个文件的作用
3.1 manage.py
此文件时项目管理的主程序,在开发阶段用于管理整个项目的开发运行模式,可以理解为项目运行入口
可使用的命令举例:
- python manage.py runserver 启动服务
- python manage.py startapp 创建应用app
- python manage.py migrate 数据库迁移
在步骤2我们就运用到了runserver整个选项来启动服务
提示:python命令未找到时,使用python3
3.2 __init__.py
包初始化文件,在此文件中导入包(import 包名)时此文件会自动运行
这个文件创建项目后默认是空的
3.3 wsgi.py
WSGI 全程为Web Server Gateway Interface (Web服务器网关接口)
这个文件是网关接口的配置文件,可通过调整此文件来设定哪些ip可以访问我们的Django项目
3.4 urls.py
URL 声明,也叫路由配置系统,一份由 Django 驱动的网站"目录",所有的动态路径必须符合该文件中的规则。
默认格式如下
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
当时用浏览器访问时,输入http://ip:端口/admin则可以进入admin下的默认界面。
urls.py文件给提供了网页路径的访问方式,它与视图文件(view.py 文章下面会提到)是紧密联系的,在该文件下定义的访问路径,如path('文件或目录',视图文件)则可以建立一种访问方式,服务器会将视图文件发送给访问方。
附录:正则表达式用法
#正则表达式:
# 元字符: \w \d \s \n \t \W \S \D \b ^ 尖角号 $ . [] [^] () |
# [0-9] \d
# [1-9]
# [\da-zA-Z]
#. :匹配除换行符"\n"以外的任意字符
#\ :转义字符,使后一个字符改变原来的意思.如果字符串中有字符*需要匹配,可以使用\*或者字符集{*}
#[...]:字符集,对应的位置可以是字符集中任意字符.字符集中的字符可以逐个列出,也可以给出范围,如[abc]
#或者是[a-c],第一个字符如果是^,则表示取反,如[^abc]表示不是abc的其他字符.所有的特殊字符在字符集中
# 都失去其原有的特殊含义.在字符集中如果要使用].-或^,可以在前面加上反斜杠,或者把],-放在第一个字符,把^
#放在非第一个字符
#\d 数字:[0-9]
#\D 非数字:[^\d]
#\s 空白字符:[<空格> \t\r\n\f\v]
#\S 非空白字符:[^\s]
#\w 单词字符:[0-9a-zA-Z_]包括了数字字母下划线
#\W 非单词字符:[^\w]
#量词 : {n} {n,} {n,m} * ? +
#* :匹配前一个字符0或无限次 abc*
#+:匹配前一个字符1次货无限次. abc+
#?:匹配前一个字符0次或1次. abc?
#{n}:匹配前一个字符n次 ab{2}c 匹配字符:abbc
#{n,}:至少匹配n次,至无限次
#{n,m}:匹配前一个字符n到m次 ab{1,2}c 匹配字符abc,abbc
#*?, +?, ?? {m,n}?,使* + ? {m,n}变成非贪婪模式
#边界匹配:
#^ :匹配字符串开头,
# 在多行模式中匹配每一行的开头. ^abc 匹配字符abc
#$ :匹配字符串末尾,
# 在多行模式中匹配每一行的末尾. abc$ 匹配字符abc
#\A 仅匹配字符串开头 \Aabc 匹配字符abc
#\Z 仅匹配字符串末尾 abc\Z 匹配字符abc
#\b 匹配\w和\W之间 a\b!bc a!bc
# |:|代表左右表达式任意匹配一个.它总是先尝试匹配左边的表达式
#一旦左边的表达式成功匹配则跳过右边的表达式
#如果|没有被包括在()中,则它的范围是整个正则表达式 abc|def
#(...) :被括起来的表达式将作为分组,从表达式左边开始每遇到
#一个分组的左括号"(",编号+1.另外,分组表达式作为一个整体,可以接数量词.
#表达式中的|仅在该组有效.
#(?P<name>...):分组,除了原有的编号外再指定一个额外的别名.
#\<number>:引用编号为<number>的分组匹配到的字符串. (\d)abc\1
#(?P = name):引用别名为<name>的分组匹配到的字符串
#转义符:
# python str : '\'
# 正则表达式中的'\'到了python中都会变成'\\'
# r'\w' 在python当中\不转义了,在Python中就是一个普通的'\',但是在正则表达式中它还是表示一个转义符
# 贪婪匹配/惰性匹配 :
# .*x 贪婪 匹配任意内容最多次,直到最后一个X停止 回溯算法
# .*?X 惰性 匹配任意内容最少次,遇到第一个X就停止
# re模块
# findall 匹配所有 列表
# search 匹配第一个 变量.group(),没匹配到返回None
# match 从头开始匹配第一个
# split sub subn
# finditer compile
# finditer 返回一个迭代器,所有匹配到的内容需要迭代取到,迭代取到的每一个结果都需要group取具体值
# -- 节省内存空间
# compile 编译,先把一个正则表达式编译,编译之后,在之后多次使用的过程不用重新编译
# -- 节省时间 提高效率
# 分组:()
# 1.给不止一个字符的整体做量词约束的时候 www(\.[\w]+)+ www.baidu.com
# 2.优先显示,当要匹配的内容和不想匹配的内容混在一起的时候,
# 就匹配出所有内容,但是对实际需要的内容进行分组
# 3.分组和re模块中的方法 :
# findall : 分组优先显示 取消(?:正则)
# search :
# 可以通过.group(index)来取分组中的内容
# 可以通过.group(name)来取分组中的内容
# 正则 (?P<name>正则)
# 使用这个分组 ?P=name
# split : 会保留分组内的内容到切割的结果中
3.4 settings.py
Django项目的配置文件,此配置文件中的参数将在项目运行中生效
更多配置项参考官方文档:
https://docs.djangoproject.com/en/3.0/ref/settings/
下面列举一部分常用参数:
BASE_DIR
用于绑定当前项目的绝对路径,以及绝对路径对相对路径的转换。用于在项目迁移时计算项目的相对路径
首先会算出settings.py文件的绝对路径:/root/Projects/myproject1/myproject1/settings.py
然后转换为项目路径:/root/Projects/myproject1/
DEBUG
用于配置Django项目的启动模式:
True:调试模式,用于开发
False:生产环境中使用
ALLOWED_HOSTS
设置运行访问到本项目的网络地址列表,如:
- [] : 空列表(默认),表示请求头中host为localhost或127.0.0.1的ip可以访问
- ['*']:任何ip都可访问
- ['192.168.1.1','127.0.0.1']:表示仅允许指定的两个ip访问
注意:如果你在设置为['*'],在启动项目时应python manage.py runserver 0.0.0.0:端口号
如果你设置为['192.168.1.100','192.168.1.101'],应确保这些ip可以ping通你的主机
LANGUAGE_CODE
指定Django项目的语言,步骤2图片所示为英文,可调整为中文,取值:
- "en-us":英文
- "zh-Hans":中文
Time_Zone
时区选择,默认为UTC。用于控制后台输出的日记信息中记录的时间值,取值:
- "UTC":世界标准世界
- "Asia/Shanghai":中国时间
3.5
4.创建第一个网站
在创建网站前,需要了解一下视图函数(view)的概念
视图函数是一个用于接收浏览器的请求,并通过HttpResponse对象返回数据的函数。此函数可以接受浏览器的请求并根据业务逻辑返回相应的内容给浏览器。简单来说就是接收并相应请求的函数。
这个函数更多意义上只是一个概念,在web编程中有这么一类函数是专门用来做这件事的,在Django中也不例外,在Django中要使用视图函数(或者说接受并处理请求)非常容易,只需要有以下代码:
def 函数名(request):
return HttpResponse(待返回的数据)
提示:request用于获取浏览器请求的各项参数
下面举一个例子:
在项目下创建一个文件,命名可随意,不过推荐专业命名,如views.py。
导入HttpResponse函数
from django.http import HttpResponse
def index_view(request):
return HttpResponse("首页")
写完views.py后还需要配置一下urls.py,让项目知道什么样的请求执行什么样的函数,如本例中views.index_view就是指的我上面创建的views.py文件以及文件下面的index_view函数
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index.html',views.index_view),
]
启动项目
$ python manage.py runserver 127.0.0.1:8000
打开浏览器访问,输入服务器ip:端口/index.html
注意:由于我在urls.py中设置了index.html指向views.py文件下的index_view函数,所以我需要在浏览器访问index.html文件