Python 框架学习 Django篇 (一) 安装及基本使用

news/2024/5/21 5:03:06

环境说明

python 3.11.3  

Django  4.2.1

idea   2023.1

一、安装调试

我这里默认idea和python环境都是装好的,直接从建项目开始

新建项目

项目名称:  demo

安装Django

//配置清华镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn//安装
pip install django==4.2.1

创建Django项目

django-admin startproject   Django_demo

 Django 项目目录结构

Django_demo    //项目目录
|
├── Django_demo            //项目最初的Python包
|   |
│   ├── __init__.py        //一个空文件,声明所在目录的包为一个Python包
|   |
│   ├── settings.py        //全局配置文件
|   |
│   ├── urls.py            //声明请求url的映射关系
|   |
│   └── wsgi.py            // python程序和web服务器的通信协议
|
└── manage.py              //命令行工具,用来和Django项目进行交互

全局配置说明

这个可以先跳过,后面不明白在回来看

import os# 项目的相对路径,启动服务的时候会运行这个文件所在路径的manage.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 安全密钥
SECRET_KEY = 'l&!v_npes(!j82+x(44vt+h&#ag7io2x&shnf*9^8fv0d63!0r'# 是否开启Debug
DEBUG = True# 允许访问的主机ip,可以用通配符*
ALLOWED_HOSTS = []# Application definition# 用来注册App 前6个是django自带的应用
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]# 中间件 ,需要加载的中间件。比如在请求前和响应后根据规则去执行某些代码的方法
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]# 指定URL列表文件 父级URL配置
ROOT_URLCONF = 'djangoDemo.urls'# 加载网页模板路径
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]# WSGI的配置文件路径
WSGI_APPLICATION = 'djangoDemo.wsgi.application'# 数据库配置 默认的数据库为sqlite
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}# 相关密码验证
AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# 语言设置 默认英语, 中文是zh-hans
LANGUAGE_CODE = 'en-us'# 时区设置,中国的是:Asia/Shanghai
TIME_ZONE = 'UTC'# i18n字符集是否支持
USE_I18N = TrueUSE_L10N = True# 是否使用timezone
# 保证存储到数据库中的是 UTC 时间;
# 在函数之间传递时间参数时,确保时间已经转换成 UTC 时间;
USE_TZ = True# 静态文件路径
STATIC_URL = '/static/'

二、app创建及结构说明

比如说我们想整一套paas平台,可能会有集群信息、资源管理、容器监控等各个模块功能

这都是不同的业务线,我们可以把每条业务线都看做一个App

创建app 应用

python manage.py startapp app_demo

app目录结构

Django_demo    //项目目录
|
├── Django_demo         
|   |
│   ├── __init__.py  
|   |
│   ├── settings.py  
|   |
│   ├── urls.py            
|   |
│   └── wsgi.py    
|       
├── app_demo                //app项目目录
|   |
│   ├── __init__.py
|   |
│   ├── admin.py           //对应应用后台管理配置文件
|   |
│   ├── apps.py            //对应应用的配置文件
|   |
│   ├── models.py          //数据模块,用于设计数据库等
|   |
│   ├── tests.py           //编写测试脚本
|   |
│   └── views.py           //视图层,直接和浏览器进行交互
|
└──manage.py

 将app项目名称添加到全局配置中

vi Django_demo/settings.py

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app_demo', #注册新创建的应用app
]

三、基本使用流程

1、添加视图

我们web框架在运行的时候类似nginx、tomcat那种服务,都是启动一个端口然后提供页面访问的,这里的视图相对于一个路由,通过应用访问的路径不同,来返回不同的页面或者结果

 vi app_demo/view.py

from django.http import HttpResponsedef login(request):   #login 为一个视图函数,每个视图函数必须第一个参数为request#哪怕不用也要有request字段return HttpResponse("登录页面")   #HttpResponse 直接返回数据

如上,我们定义了一个login的函数,当调用的时候浏览器会直接返回一个字符串,下面配置怎么去调用这个函数

2、设置url路径

vi Django_demo/urls.py

from django.urls import path,re_path   #导入路由方法
from app_demo import views  #导入视图函数urlpatterns = [#path  绝对匹配#re_path 模糊匹配 (支持正则)path("login/", views.login),       #访问服务端的login/路径的请求会触发视图函数返回信息re_path(r'^hello/$', views.login),
]

注意

我们设置url路径的结尾一定要有斜杠"/"

3、启动测试

#应用配置
python manage.py runserver#访问
http://127.0.0.1:8000/login/

四、子路由和HTML渲染

上面只是去返回一个值,我们尝试将他和html文件联动起来

 创建模板目录

templates

目录结构

Django_demo 
|
├── Django_demo         
│   ├── __init__.py  
│   ├── settings.py  
│   ├── urls.py            
│   └── wsgi.py    
|       
├── app_demo             
|   |
│   ├── __init__.py
│   ├── admin.py          
│   ├── apps.py           
│   ├── models.py         
│   ├── tests.py           
│   └── views.py           
├──manage.py
|
└──templates    #创建目录

全局配置指定html模板文件目录

vi Django_demo/settings.py

import os   #导入os模块
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates',#初始为[] 添加如下配置'DIRS': [os.path.join(BASE_DIR, 'templates')],  'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

添加html文件

我们期望实现当第一次访问时去做一个用户登录的认证,如果登录成功则跳转到正确的主页,反之在登录的主页上反馈报错的信息

vi templates/login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title><style>body{text-align:center;}</style>
</head>
<body>
<form action="/login/" method="post">{% csrf_token %}<h1 align="center">登录页面</h1><p class="divs"><label for="username">用户名:</label><input type="text" id="username" name="username" align="center"></p><p class="divs">&nbsp&nbsp&nbsp<label for="password">密码:</label><input type="password" id="password" name="password"></p><input type="submit" value="登录"><span style="color:red">{{ error }}</span>
</form></body>
</html>

{{ error }}  是指我们登录失败时,反馈到浏览器的一个变量名

vi templates/index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>这里是主页</title><style>h1 { color:red }</style>
</head>
<body><h1>这里是主页</h1>
</body>
</html>

修改视图函数

前面我们有了解,视图相当于一个路由,我们在这一层通过各种形式的判断将结果反馈到浏览器上

 vi app_demo/views.py

from django.shortcuts import render,redirectdef login(request):#request.method 请求模式#request.POST.get 取key值if request.method == 'POST':username = request.POST.get('username')passowrd = request.POST.get('password')#当应用输入正确时,使用redirect 跳转到index服务端的 127.0.0.1:8000/index  路由上if username=='root' and passowrd =='123456':return redirect('/index')else:#当输入错误时,返回给用户登录页面的主页#并且给error 变量赋值,html文件中通过{{ error }}去调用该变量return render(request,'login.html',{"error":"用户名或密码错误"})#如果请求格式不是POST,则直接返回主页文件return render(request,'login.html')def index(request):return render(request,'index.html')

添加app自身的url

我们应用的路由后面会越来越多,都放在全局难以维护,我们将urls拆分到各个应用,先在app_demo下建一个urls.py文件

vi app_demo/urls.py

from django.urls import path,re_path
from  . import views   #导入app下模块urlpatterns = [path("login/", views.login),  #登录路由path("index/", views.index),  #主页路由
]

vi Django_demo/urls.py

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),  #自带的主页文件path('', include('app_demo.urls')) #声明一下包含的路由文件
]

启动程序

python manage.py runserver


http://wed.xjx100/news/198265.html

相关文章

【计算机网络基础】章节测试2 物理层

文章目录 判断题选择题辨析题应用题 判断题 现在的无线局域网常用的频段是2.8GHz和5.4GHz。 多模光纤只适合于近距离传输。√ 数据在计算机内部多采用串行传输方式&#xff0c;但在通信线路上多采用并行传输方式。 统计时分复用可以按需动态分配时隙。√ 相对于同步时分复用…

Spring事务与事务传播机制

文章目录 为什么需要事务&#xff1f;回顾MySQL中事务的使用Spring中事务的实现编程式事务声明式事务声明式事务失效场景 Spring中事务的隔离级别Spring事务的传播机制 为什么需要事务&#xff1f; 事务是将一组操作封装成一个执行单元&#xff0c;该组操作要么全部执行成功&a…

excel根据不同分类动态设置不同下拉列列表

有这样一个需求&#xff0c;有很多个系统&#xff0c;需要在excel中下拉选择其系统一级分类、二级分类、三级分类&#xff0c;不同的一级分类对应不同的二级分类列表&#xff0c;不同的二级分类对应不同的三级分类列表。 针对这个需求&#xff0c;我们采用了excel/wps中的数据…

geoserver切片数据本地缓存和层级配置

很多业务场景中&#xff0c;我们会用到图层切片功能&#xff0c;默认情况下&#xff0c;每次调用都是新的重新切片&#xff0c;这样在性能上存在一定问题&#xff1b;基于此我们可以进行本地缓存切片&#xff0c;及此地理位置只进行一次切片处理&#xff0c;数据缓存在本地磁盘…

树查找_01

树查找 描述 有一棵树&#xff0c;输出某一深度的所有节点&#xff0c;有则输出这些节点&#xff0c;无则输出EMPTY。该树是完全二叉树。 输入描述&#xff1a; 输入有多组数据。 每组输入一个n(1<n<1000)&#xff0c;然后将树中的这n个节点依次输入&#xff0c;再输入一…

AUTOSAR知识点 之 COM (一):基础知识

目录 1、概述 1.1、简介 1.2、各模块依赖关系 1.2.1、PDUR关系 1.2.2、RTE 2、SPEC解读

IPB072N15N3G-ASEMI代理英飞凌高压MOS管IPB072N15N3G

编辑&#xff1a;ll IPB072N15N3G-ASEMI代理英飞凌高压MOS管IPB072N15N3G 型号&#xff1a;IPB072N15N3G 品牌&#xff1a;英飞凌 封装&#xff1a;TO-263 最大漏源电流&#xff1a;31A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff1a;99mΩ…

Java实现PDF导出/预览

网上有很多关于PDF导出的文章&#xff0c;但是个人感觉实现的过于复杂&#xff0c;又是模板又是html的&#xff0c;有的还需要字体模板的支持&#xff0c;本片文章只是实现简单的PDF表格导出&#xff0c;可以实现PDF动态表格导出/预览&#xff0c;这类文章网上很少&#xff0c;…