首页 > 编程语言 >Python Django框架

Python Django框架

时间:2024-12-15 12:00:49浏览次数:11  
标签:框架 views Python py request Django import path django

官网:ggDownload Django | Django

00cab9930bd74aefbb741f6a7136d78b.png在终端输入命令下载Django

Django项目结构:

        安装完成后,终端会有django-admin命令

django-admin startproject 项目名  //可创建对应的项目文件夹

例如:django-admin startproject mysite1

启动:

1,终端进入mysite1文件夹

cd mysite1

2,进入项目文件夹后,执行

python manage.py runserver  //启动服务,该启动,默认端口为8000

若8000端口无法访问,可以自定义端口(端口必须是未占用的)
python manage.py runserver 5000

3,浏览器访问http://127.0.0.1:8000 可看到Django界面

7ac0f9c0a5714a12807fbb8e28ba2a16.png

关闭服务:

在终端中执行 Crtl+c 可以关闭服务器

结构分析: 打开mysite1文件

d007f7612c8543aaab13804f5f888ff9.png

db.sqlite3在第一次执行创建文件时就默认被创建出来了 ,为默认的Django的数据库文件

manage.py:包含项目管理的子命令

python manage.py runserver //启动服务
python manage.py startapp //创建应用
python manage.py migrate  //数据库迁移

等

项目同名文件夹:mysite1/mysite1

  • _init_: python包的初始化文件
  • wsgi.py: WEB服务网关的配置文件
  • urls.py: 项目的主路由器配置 - HTTP请求进入Django时首先调用此文件
  • settings.py: 项目的配置文件,包含项目启动时需要配置的文件

settings.py :

BASE_DIR=''         //为项目绝对路径
DEBUG = True
//为启动模式
//True 调试模式
//False 上线模式
ALLOWED_HOSTS = []  //请求host文件

DEBUG=True时,默认为127.0.0.1和localhost
ROOT_URLCONF = 'mysite1.urls'   //django的主路由配置

LANGUAGE_CODE = 'en-us'    //为页面语言,zh-Hans为中文

TIME_ZONE = 'UTC'        //为时间,Asia/Shanghai为中国时间

URL和视图函数

        Django如何处理url呢?

44437a067ca3419b9e02e55bca776b12.png

         urls.py:9cdc1c08386047e687ab158028766159.png

urlpattern为数组,调用path指明当前可服务的地址有哪些

 admin/,page/2003/,page/2004/,为路由地址,表示网站可以接这三个地址,其余不在这数组的全报404

例如:#http://127.0.0.1:8000/page/2004/

path的第二个参数为核心,调用视图函数对应的路由路径返回响应的Response

视图函数:

daa964bc775c48e0a010c4d283f7a02a.png

request为必须的,将请求传到试图函数上

视图函数的创建:

#file 在项目同名文件夹下/views.py
from django.http import HttpResponse
def xxx_view(request):
    html='<h>这是第一个页面<\h>'
    return HttpResponse(html)

 并在urls.py文件中导入views.py的文件ea5f5599e66e4d6f9a2c578e03e62afa.png

 访问页面查看

8c15990bbcf8479cb78114a63082f4a4.png

路由配置:

        路由配置 - path

  • path()函数
  • 导入 from django.urls import path
  • 语法 path(route,views,name=None)
  • 参数:
    • 1,route :字符串类型,匹配的请求路径
    • 2,views:指定路径所对应的视图函数名称
    • 3,name:为地址起别名
#urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('path/1',views.page_1_view),
    path('path/2',views.page_2_view)
]

#views.py

from django.http import HttpResponse

def page_1_view(request):
    html='<h1>这是第一面</h1>'
    return HttpResponse(html)

def page_2_view(request):
    html='<h1>这是第二面/h1>'
    return HttpResponse(html)

path转换器:

7dab363c24a44e728d2fe7c007d876a2.png

<int:page>,里的page为自定义形参,将page传入到视图函数中,视图函数要准备一个与自定义相同的形参即p age

b0f8c867bc9a48909a55c4e6d2e23c37.png

小练习:计算器

定义一个路由格式为http://127.0.0.1:8000/整数/操作字符串[add,sub,mul]/整数

例如:127.0.0.1:8000/100/add/100

页面显示:300

#urls.py
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<int:n>/<str:use>/<int:m>',views.page_view)
]

#views.py
def page_view(request,n,use,m):
    if username not in ['add','sum','mul']:
        html='no'
        return HttpResponse(html)
    if username == 'add':
        return HttpResponse('%s'%(n+m))
    if username == 'sum':
        return HttpResponse('%s'%(n-m))
    if username == 'mul':
        return HttpResponse('%s'%(n-m))

re_path函数:

78c39173005948049bad5eca1a0db20a.png

例如:
path(r'^(?P<x>\d{1,2})/(?P<op>\w+/(?P<y>\d{1,2)',views.cal2_views)

匹配 1-2位的数组/字母/1-2位的数组

\d{1,2} //匹配一到两位的数字
\w+     //匹配所有字母

请求和响应:

Django中的请求;

  • 请求在Django中就是视图函数的第一个参数,即HttpRequest对象
  • Django接受到http协议的请求后,会根据请求数据报文创建Httprequest对象
  • Httprequest对象通过属性描述了请求的所有相关内容
path_info            //URL字符串
method                //字符串,表示http请求方法,常值用‘GET’,’POST‘
GET                  //QueryDict查询字典的对象,包含get请求的所有数据
POST                 //QueryDict查询字典的对象,包含POST请求的所有数据
FILES                //类似于字典的对象,包含所有上传文件的信息
COOKIE                //python字典,包含所有cookie,键值都为字符串
session                //类似于字典对象,表示当前会话
body                //请求体的内容(POST或PUT)
scheme                //请求协议
request.get_full_path()        //请求的完整路径
request.META            //请求中的元数据(消息头)
request.META['REMOTE_ADDR']        //客户端ip地址
        

 例如:

#urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('path/<int:pg>/<str:username>/<int:pg1>',views.page_view),
    path('test',views.test)
]

#views.py

from django.http import HttpResponse
def test(request):
    print('path info is',request.path_info)
    print('method is',request.method)
    print('GET is',request.GET)
    return HttpResponse('test ok')  //页面响应‘test ok’

去终端中查看path_info,method,GET

 

GET和POST

无论是GET还是POST,一律都用视图函数接收,通过request.method区分具体的请求方式

GET处理:

POST请求:

#urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('path/<int:pg>/<str:username>/<int:pg1>',views.page_view),
    path('test',views.test),
    path('test_post',views.test)
]

#views.py

from django.http import HttpResponse

POST_FORM='''
<form method='post' action='/test_post'>
    <input type='text' name='usname'>
    <input type='submit' value='提交'>
</form>
'''        #定义一个全局变量的form表单

def test(request):
    print('path info is',request.path_info)
    print('method is',request.method)
    print('GET is',request.GET)
    if request.method=='GET':
        print('a is',request.GET['a'])
        print('a is',request.GET.getlist('a'))
        print(request.GET.get('c','no c'))
        return HttpResponse(POST_FORM)    #以get方式参数为a提交的,返回form表单
    elif request.method=='POST':
        print('usname is',request.POST['usname'])    #接受post提交的usname的值
        
        return HttpResponse('post is ok')
    
    return HttpResponse('text ok')

 

但访问时报错

这是Django为了防范CSRF漏洞所制定的规则,如果未按规则走提交的请求将提交不了

所以前期,我们需要在setting.py文件中手动关闭中间介

模板层:

        先来了解Django的设计层(MTV):

视图层将 收到的数据打包送入 模板层 后返回给 html页面

模板的创建:

模板的加载方式:

#views.py
from django.http import HttpResponse
def template_s(html):
    from django.template import loader
    t = loader.get_template('test_html.html')
    html = t.render()
    return HttpResponse(html)

#urls.py中写入对应的路径
path('test_html',views.template_s)

#在templates文件夹下创建html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>template</title>
</head>
<body>
    <h1>模板层~~~~~~~</h1>
</body>
</html>


 访问模板的路径

render函数中的第三项字典数据可有可无

模板与视图的交互:

这里将会使用到 render 的第三个参数 字典数据

在模板中所可以传递的参数:

str - 字符串        int - 整形

list - 数组           tuple - 元组

dict - 字典          func - 方法

obj - 实例化的对象

在模板中使用变量:

{{变量名}}
{{变量名.index}}
{{变量名.key}}
{{对象.方法}}
{{函数名{}}

例子:

在urls.py中:

def test_template:
   from django.template import loader
   dct={}
   dct['int']=18,
   dct['str']='haohao',
   dct['list']=['yom','Tom','Hao'],
   dct['dict']=['a':'ok','b':'yes'],
   dct['func']=say_hai,        #传入一个函数
   dct['class_obj']=Dog(),    #传一个类的实力胡对象
   return render(request,'test_html',dct)

def sya_hai:
    return 'hhh'

class Dog:
    def say(self):
    return 'hello'
    

 在test_template.html

<h1>int is {{int}}</h1>
<h2>str is {{str}}</h2>
<h3>list is {{list}}</h3>    //返回整个列表

<h3>list[0] is {{list.0}}</h3>    //返回列表中索引为0的值

<h4>dict is {{dct}}</h4>    //返回整个字典

<h5>dict['a'] is {{dct.a}}</h5>   //返回字典中键对应的值
<h6>func is {{func}}</h6>   //传入函数返回值
<h7>obj is {{class_obj.say}}</h7>      //传入实例化对象的返回值

访问页面:

模板标签:

作用:将服务端的一些功能嵌入到模板中,例如流程控制等

语法:

{% 标签 %}
......
{% 结束标签 %}
#在html中写入代码

{% if x>10 %}
yes is ok
{% else %}
no no no
{% endif %}

 

 

标签:框架,views,Python,py,request,Django,import,path,django
From: https://blog.csdn.net/2401_87971103/article/details/144439343

相关文章

  • Python序列的应用(九):集合以及列表、元组、字典和集合的区别
    前言:在Python编程语言中,序列是一类非常重要的数据结构,它们提供了一种有序地存储和访问数据的方式。在Python中,序列的应用非常广泛,它们是处理数据集合的基础工具。本系列文章旨在深入探讨Python中的序列类型,包括列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set),并分析它们之间的区别......
  • Qt | 安全的udp服务器搭建(代码框架值得学习)
    点击上方"蓝字"关注我们01、项目框架>>>02、QHostAddress>>>QHostAddress 是 Qt 网络模块中的一个类,用于表示IP地址。它支持IPv4和IPv6地址,可以用于网络编程中,如建立TCP或UDP连接。QHostAddress 提供了一些方法来处理和转换IP地址03、m......
  • YOLOv8目标检测——详细记录使用ONNX Runtime进行推理部署C++/Python实现
    概述在之前博客中有介绍YOLOv8从环境安装到训练的完整过程,本节主要介绍ONNXRuntime的原理以及使用其进行推理加速,使用Python、C++两种编程语言来实现。https://blog.csdn.net/MariLN/article/details/143924548?spm=1001.2014.3001.55011.ONNXRuntimeONNXRuntime是......
  • Python 潮流周刊#81:在个人电脑上运行 GPT-4 级别的大模型(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,2则音视频,全文2200字。以下是本期摘要:......
  • 使用PyTorch框架来训练语义分割模型——航空影像输电线路与输电塔分割数据集,使用U-Net
    航空影像的输电线路与输电塔分割数据集。该数据集包含1234张图像,超高分辨率(约3840×2160)标注了11447个对象,属于5个不同的类别,包括电缆(cable)、铁塔(tower_lattice)、木塔(tower_wooden)以及其他两种类型:混凝土或钢结构混合塔(tower_tucohy)和空白肉眼不可见线缆(void),共3GB好的......
  • 【如何获取股票数据02】Python、Java等多种主流语言实例演示获取股票行情api接口之沪
    最近一两年内,股票量化分析逐渐成为热门话题。而从事这一领域工作的第一步,就是获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的主要任务是从这些数据中提炼出有价值的信......
  • python 代码主要实现了与金融数据处理、存储以及因子计算相关的一系列功能,涉及从不同
    #忽略某些模块的提示信息importsysimporttracebackimportwarningsimportpymysqlfrompandasimportDataFrame,concat,Serieswarnings.filterwarnings("ignore")#在全局配置中添加RQData账号信息importrqdatacasrqfromtypingimportListimportpa......
  • 使用任务队列TaskQueue和线程池ThreadPool技术实现自定义定时任务框架详解
    前言在桌面软件开发中,定时任务是一个常见的需求,比如定时清理日志、发送提醒邮件或执行数据备份等操作。在C#中有一个非常著名的定时任务处理库Hangfire,不过在我们深入了解Hangfire之前,我们可以手动开发一个定时任务案例,用以帮助我们理解Hangfire的核心原理。我们可以利用......
  • python3安装pandas
    检查安装环境检查python版本python--version检查pip版本pip--version检查安装列表piplist安装pandaspip3installpandas这是从官方下载安装,速度比较慢,可以使用国内镜像站清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/py......
  • 《Django 5 By Example》阅读笔记:p543-p550
    《Django5ByExample》学习第19天,p543-p550总结,总计8页。一、技术总结1.fixtures(1)定义Afixtureisacollectionoffilesthatcontaintheserializedcontentsofthedatabase.(2)作用1)数据导入一般来说,我们是通过数据库工具(如:Navicat,DBeaver)进行数据导......