【Djongo】python的开源Web框架

基本指令集

https://www.bilibili.com/video/BV1vK4y1o7jH?p=5&spm_id_from=pageDriverP5


创建项目:django-admin startproject mysite1(项目名称)

启动项目:python3 manage.py runserver(默认8000端口)

更换端口启动:python3 manage.py runserver 5000(启动端口号)

查看manage命令集:python3 manage.py

查看运行详情:sudo lsof -i:5000(端口号)

COMMAND PID USER FD TYPY DEVICE SIZE/OFF NODE NAME python3 39423(线程号) tarena 4u IPv4 801218 0t0 TCP localhost:5000(LISTEN)

杀死进程:sudo kill -9 39423(项目线程号)

项目结构


Djangotest01     #(项目名称)
|- db.sqlite3    # 默认存储数据库(第一次启动项目时被创建,可以替换成别的数据库)
|- manage.py     # 指令集
|- DjangoTest01  # (同项目名称)
		|- _init_.py #(Python包初始化文件)
  	|- _pycache_
    |	    |- _init_.cpython-36.pyc
    |     |- settings.cpython-36.pyc
    |     |- urls.cpython-36.pyc
    |     |- wsgi.cpython-36.pyc
    |- settings.py # 配置文件
    |- urls.py		 # 项目主路由配置 -HTTP 请求进入Django时,优先调用该文件
    |- wsgi.py		 # web 服务器网关配置文件 -Django正式启动时,需要用到
    
2 directories,10 files _

settings.py (配置文件)


  • 分为
    • 公有配置(项目已经存在的配置)
    • 自定义配置
  • 配置项格式: BASE_DIR='xxxx’
    • 名字必须是大写的

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_file_))) 
# 基础目录地址 = 项目绝对路径

从内到外

os.path.abspath(file)

👆🏻👆🏻👆🏻 settings.py 这个文件的绝对路径

往外两层,也就是项目的绝对路径

DEBUG = True 
# 检测代码改动后,立刻重启服务
# 如果代码报错,浏览器访问会显示 报错页面(信息量极大)
# 发布时改为 False
ALLOWED_HOSTS = []
# 请求头的值,当请求头的值在这里才接收请求

# 注意:里面填写的并不是客户机IP,而是请求头所写的地址

值为null且Debug为True,则默认接127.0.0.1和localhost

值为 ’ * ’ 则接所有的请求;

  • 局域网内网访问设置
    • 启动:python3 manage.py runserver 0.0.0.0:5000
    • 指定请求头:ALLOWED_HOSTS=[‘内网IP’]
DATABASES = {
  'default':{
    'ENGINE':'django.db.backends.sqlite3',
   	'NAME':os.path.join(BASE_DIR,'db.sqlite3')
  }
} 
# 数据库配置
LANGUAGE_CODE = 'en-us' 
# 语言(小火箭界面)
# 中文:zh-Hans
TIME_ZONE = 'UTC'
# 格林威治时间
# 东八区为:Asia/Shanghai
ROOT_URLCONF = 'mysite1.urls'
# 用于配置主 url 配置

URL 和 视图函数


protocol://hostname[:port]/path[?query][#fragment]
  • Protocol :协议(http or https)
  • hostname :域名 或 IP
  • port :端口号(默认http是80端口所以一般不写,可以省略)
  • path:路由,具体访问网站下的哪个资源
  • query:查询字符串
  • #fragment:宝典,快速访问某一个标题栏
  • protocol(协议)http://yiyibook.com

    • http / https / file( file:/// )
  • Hostname (主机名) http://yiyibook.com

  • Port(端口号) :http://yiyibook.com:80

  • Path(路由地址)http://tts.tmooc.cn/video/showVideo

  • Query (查询) /video/showVideo?menuld = 657421&version=AID999

    • 以 ’ ? '连接
    • key = value
    • 多个键值对之间用 ’ & ’ 连接
  • fragment (信息片段)version=AID999#subject

    • 以 ’ # ’ 开始
    • 用于跳到某个标签(网页的某个位置,类似于书签 或 标题)
处理URL请求

浏览器 地址栏 -> http://127.0.0.1:8000/page/2003/

1、Django从配置文件中 根据ROOT_URLCONF 找到 主路由文件;默认情况下,该文件在 项目名同名目录下的urls;例如:DjangoTest01/DjangoTest01/srls.py

2、Django 加载主路由文件中的urlpatterns 变量[包含很多路由的数组]

3、依次匹配 urlpatterns 中的path,匹配到第一个合适的终端后续匹配

4、匹配成功 - 调用对应视图函数处理请求,返回响应(找到后就不会继续往下找了)

5、匹配失败 - 返回 404 响应

urls.py & 视图函数

# urls.py 文件

import . from views
urlpatterns = [
    path('admin/', admin.site.urls),
    #http://127.0.0.1:8000/page/2003
    path('page/2003/',views.page_2003)
]
# 视图函数
# def xxx_view(request[,其他参数]):
#   return HttpResponse对象

# 示例 file<项目同名文件夹下> /views.py
from django.http import HttpResponse
def page1_view(request):
  html = "<h1>这是第一个界面</h1>"
  return HttpResponse(html)
Path 转换器

思考:

​ 系统中有100个路由,分别是:

​ http://127.0.0.1:8000/page/1

​ http://127.0.0.1:8000/page/2

​ ……

​ http://127.0.0.1:8000/page/100

可以实现,但是比较麻烦,这些请求除了末端数字不一样以外其余完全一致,则可以考虑使用Path 转换器来实现。

  • 语法 : <转换器类型:自定义名>
  • 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
  • 例子:
path('page/<int:page>',views.xxx )
转换器类型作用样例
str匹配除了’/'外的非空字符串"V1/users/< str:username >"匹配/v1/users/guoxiaonao
int匹配0或任何正整数,返回一个int"Page/< int:page >"匹配/page/100
slug匹配任意由ASCII字母或数字以及连字符、下划线组成的短标签"Detail/< slug:sl >"匹配/detail/this-is-django
path匹配非空字段,包括路径分隔符’/’"V1/user/< path:ph >"匹配/v1/goods/a/b/c
# url.py
path('page/< int:pg >',views.pagen_view)

# views.py
def pagen_view(request,pg):
  html='这是编号为%s的网页'%(pg)
  return HttpResponse(html)
# 实例 计算机
# 效果 当地址栏中输入 127.0.0.1:8000/200/add/300 时 显示500(200与300可变,返回值为两数字之和)

# urls.py
path('<int;x>/<str:op><int:y>',view.cal_view)

# views.py
def cal_view(request,x,op,y):
	result = 0
	if op not in['add','sub','mul']:
    return HttpResponse('Your op is wrong')
	if op == 'add':
		result = x+y
  if op == 'sub':
    result = x-y
  if op == 'mul':
    result = x* y 
  html = '结果是%s'%(result)
  return HttpResponse(html)

Path 函数 与 Path 转换器 结束

路由转换器2-正则 re-path    re = 正则

  • re_path函数

  • 在 url 的匹配过程中可以使用正则表达式进行精准匹配

  • 语法

    • re_path(reg,view,name=xxx)
    • 正则表达式为命名分组模式 (?P< name (组名)>pattern); 匹配提取参数后用关键字传参方式传递给视图函数
# 计算器,只计算 两位数 加减乘 两位数
# 三位数不可用
from django.urls import path.re_path

urlpatterns = [
  path('admin/',admin.site.urls),
	
  re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal2_view),
]

# r 原始字符串
# ^ 以……开头
# $ 以……结尾
# <x> 的命名分组,里面的正则为 
	# \d 整数类型
  # {1,2} 1~2位
# 总体 以^开头的x组1~2位的整数型数字 + 一个字符 + 以一个1~2位的整数型y 结尾

def cal2_view(request,x,op,y){
  html = 'x:%s op:%s y:%s'%(x,op,y) # 不进行运算 直接返回
  return HttpReponse(html)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值