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

news2025/1/16 5:56:35

环境说明

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 = True

USE_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 HttpResponse

def 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,redirect

def 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,include

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

启动程序

python manage.py runserver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMBER分子动力学模拟之结果分析(突变型的能量计算,丙氨酸扫描)-- HIV蛋白酶-抑制剂复合物(5)

AMBER分子动力学模拟之结果分析(突变型的能量计算,丙氨酸扫描)-- HIV蛋白酶-抑制剂复合物(5) 丙氨酸扫描 在带电残基上引入一个或几个丙氨酸&#xff0c;观察这些改变对蛋白功能的影响。置换成丙氨酸&#xff0c;去除了侧链上的活性基团&#xff0c;换成了体积小、无其他官能…

【AGC】新版鸿蒙崩溃SDK集成使用方法

【背景】 我们知道AGC的Crash SDK都是需要强制集成华为分析SDK的&#xff0c;在使用时的崩溃数据上报都要依靠分析服务来完成&#xff0c;这就容易受到限制&#xff0c;有时出现无数据的情况就要依次排查崩溃SDK与分析SDK&#xff0c;比较麻烦。而就在不久前&#xff0c;鸿蒙崩…

【Linux】内存映射

目录 内存映射相关函数解析代码示例1&#xff08;使用内存映射实现没有关系的进程间的通信&#xff09;&#xff1a;代码示例2&#xff08;使用内存映射实现文件间拷贝&#xff09;&#xff1a;匿名内存映射 橙色 内存映射 内存映射(Memory-mapped I/o)是将磁盘文件的数据映射…

GitLabRunner安装部署

实战&#xff1a;GitLabRunner安装部署-2023.4.26(安装成功) 目录 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 gitlab-runner-15.0.1-1.x86_64.rpm实验软件 链接&#xff1a;https://pan.baidu.com/s/10aL_kWzDKnZXBXG3-hS2tA 提取码&#xff1a;0820 2023.4.26-实战&#xff1a…

HTTP第16讲——HTTP的重定向和跳转

背景 “超文本”里含有“超链接”&#xff0c;可以从一个“超文本”跳跃到另一个“超文本”&#xff0c;对线性结构的传统文档是一个根本性的变革。 能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起&#xff0c;形成了复杂…

058:cesium设置图片纹理材质

第058个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置图片材质,相当于在球体上贴图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共85行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

如何批量旋转图片方向,包教会方法分享

如何批量旋转图片方向&#xff0c;这个怎么搞呢&#xff1f;小编曾经遇到一个问题&#xff0c;就是我将手机上的照片上传到电脑后发现所有的图片都是倒立的&#xff0c;这让查看变得非常不方便。尽管小编已经尝试过打开每张图片并逐个旋转后再另存为&#xff0c;但这种方式十分…

qiankun + Vite + React + Vue + Angular 快速构建前端微服务

文章目录 一、主应用 vite二、微应用 react三、微应用 vue四、微应用 angular五、项目地址 一、主应用 vite npm npm create vitelatestyarn yarn create vite选择是否继续 Need to install the following packages:create-vite3.2.1 Ok to proceed? (y) y项目名称 Project…

HIVE建表详细教程

1. 注意事项如下 1.1 分区字段 可以有多个分区字段&#xff0c;一般以时间维度来建立分区&#xff0c;也可以再加其他字段。以业务场景为提前条件&#xff0c;来设定分区的字段。 从业务角度理解&#xff0c;分区字段可理解为业务数据的一部分&#xff0c;作为业务查询…

Bed Bath and Beyond EDI 需求分析

Bed Bath and Beyond&#xff08;Bed Bath and Beyond&#xff09;是一家美国的家居用品零售商&#xff0c;成立于1971年&#xff0c;总部位于新泽西州Union。该公司在美国、加拿大和墨西哥拥有超过1500家门店。其产品涵盖了床上用品、浴室用品、厨房用品、家居装饰等领域&…

Win11怎么添加用户?我们都知道系统一般默认是administraor用户

Win11怎么添加用户&#xff1f;我们都知道系统一般默认是administraor用户&#xff0c;但如果你还想添加新用户的话&#xff0c;那么可以参考以下操作哦&#xff0c;步骤简单&#xff0c;安全有效&#xff0c;我们一起来学习下吧。 具体操作如下&#xff1a; 1、首先&#xff0…

NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes

文章目录 NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes概述实验结论补充END NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes 概述 在尝试迁移 openpnp - Smoothieware project 从gcc命令行 MRI调试方式 到NXP MCUXpresso工程…

iscsi删除已失效的链路

有套rac环境&#xff0c;主机连接存储使用的iscsi方式&#xff0c;使用了一段时间&#xff0c;客户感觉网络设计不合理&#xff0c;需要调整网段vlan和ip地址 首先关闭实例和集群&#xff0c;调整存储端和主机端的ip地址和vlan&#xff0c;调整后可以ping通&#xff0c;使用如…

隐藏自己的真实ip

本文转载于&#xff1a; https://blog.csdn.net/csdnmmd/article/details/126952312 1.ip查看 https://mp.weixin.qq.com/s/zs2clrxQts9f7pK6CQ2oOw 1.1 无隧道的情况 当前从138和请求ipinof.io上可以查到目前我的ip地址为真实的ip&#xff1a; 访问下面这个地址之后&#xff…

SVG矢量图怎么做?

SVG 矢量图是一种可缩放的图像格式&#xff0c;基于 XML 的标记语言。它可以用于描述二维矢量图形&#xff0c;并且具有数百种功能&#xff0c;能够帮助你创建出色的网站。SVG矢量图怎么做&#xff1f;在本教程中&#xff0c;我们将学习如何使用SVG矢量图编辑器——即时设计制作…

一种基于非均匀分簇和建立簇间路由的算法的无线传感器网络路由协议(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文准备了一种路由方法&#xff0c;该方法使传感器通过有效地使用能量将数据从发送方加载到接收器&#xff0c;因为它在 LEAC…

安装Ubuntu18.04双系统、干净卸载,并在Ubuntu系统中安装CARLA模拟器

Ubuntu系统安装 Ubuntu系统安装参照流程 Ubuntu 双系统安装流程_ubuntu双系统_地球被支点撬走啦的博客-CSDN博客 Ubuntu系统卸载 1.将开机启动项设置默认为Windows&#xff0c;进入BIOS设置界面调整BootDevice中Windows和Ubuntu的顺序&#xff0c;将Windows调整在Ubuntu前边…

封神之作!超火Java面试突击手册一周内转发2.4W次,最终被所有大厂封杀

前言 本文是为了帮大家快速回顾了Java中知识点&#xff0c;这套面试手册涵盖了诸多Java技术栈的面试题和答案&#xff0c;相信可以帮助大家在最短的时间内用作面试复习&#xff0c;能达到事半功倍效果。 本来想将文件上传到github上&#xff0c;但由于文件太大有的都无法显示…

OpenPCDet系列 | 5.4.1 DenseHead中的AnchorGenerator锚框生成模块

文章目录 AnchorGenerator模块AnchorGenerator.generate_anchors函数 AnchorGenerator模块 首先&#xff0c;根据点云场景将其划分为一个个grid&#xff0c;这个grid size是可以通过配置文件设定的点云场景方位和voxel大小计算出来的。 POINT_CLOUD_RANGE: [0, -39.68, -3, 6…

研发工程师玩转Kubernetes——部署应用

Kubernetes是容器的管理编排工具&#xff0c;而容器则是程序的载体。我们先在Docker上部署应用&#xff0c;然后再在kubernetes上部署&#xff0c;并对它们进行对比学习。 Docker部署应用 查看运行中的容器 docker ps可以看到下面的表头&#xff0c;此时没有一个运行中的容器…