28. Python Web 编程:Django 基础教程

news2024/12/25 12:18:52

目录

    • 安装使用
    • 创建项目
    • 启动服务器
    • 创建数据库
    • 创建应用
    • 创建模型
    • 设计路由
    • 设计视图
    • 设计模版

安装使用

Django 项目主页:https://www.djangoproject.com

访问官网 https://www.djangoproject.com/download/ 或者 https://github.com/django/django

'''Windows 按住win+R 输入 cmd,Mac 打开Terminal
pip install Django==3.1.7
或者
git clone https://github.com/django/django.git
'''
# 输入python进入解释器,查看版本
import django
print(django.VERSION)
exit()

创建项目

一个网站可以包含多个Django项目,一个Django项目包含多个应用,又包含一组特定的对象,创建项目的基本步骤如下:

  1. 新建文件夹用来存放项目,然后使用cd命令切换到该文件夹下。
  2. 输入下面命令,在该目录中新建一个mysite项目。
adjango-admin startproject mysite
zsh: command not found: adjango-admin
# 报错原因是因为没配置路径,在这里就不展示配置路径,直接用绝对路径执行,如下
/Users/guanfawang/opt/anaconda3/lib/python3.9/site-packages/django/bin/django-admin.py startproject mysite

在这里插入图片描述

  • manage.py:Django 管理主程序,也是实用的命令工具,方便管理Django项目,同时方便用户以各种方式与Django项目进行交互。
  • __init__.py:一个空文件,告诉Python该目录是一个Python包。
  • settings.py:全局配置文件。包括Django模块应用配置、数据库配置、模版配置等。
  • urls.py:路由配置文件,包含URL的配置文件,也是用户访问Django应用的方式。
  • wigs.py:一个与WSGI 兼容的Web服务器入口,以便运行项目,相当于网络通信模块。

这些文件仅仅包含一个最简单的Web应用所需要的代码。当Web应用变得复杂时,将对这些代码进行扩充。

启动服务器

执行下面代码,启动Web服务器。

cd mysite
python manage.py runserver

在这里插入图片描述

复制网址,浏览器打开,可以看到下面情况,说明Web服务器启动成功。

在这里插入图片描述

使用Ctrl+C中断该服务器。

创建数据库

Django 内置SQLite数据库,同时支持更多的数据库,如MySQL、PostgreSQL等,每个Django应用目录中都包含一个settings.py文件,可以用来实现对数据库的配置。

# 源settings.py文件默认sqlite3
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 可以将它修改成mysql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '11111111',
        'NAME': 'webname'
    }
}

# 输入一下命令创建
python manage.py migrate
'''报错:原因是Django并不认这个外来文件驱动
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
'''
# 可以在__init__.py空文件中,添加以下命令
import pymysql
pymysql.install_as_MySQLdb()

# 再一次执行创建,就生成了
python manage.py migrate
或者
python manage.py makemigrations

在这里插入图片描述

进一步使用客户端工具连接mysql,就可以看到相关表和数据了。

在这里插入图片描述

创建应用

一个Django项目可以包含多个Django应用,执行下面命令将会生成下图相关文件。

python manage.py startapp demo

在这里插入图片描述

  • migrations:该文件夹用于在之后定义引用迁移功能。
  • __init__.py:一个空文件,在这里是必须的。用来将整个应用作为一个Python模块加载。
  • admin.py:管理站点模型,用于编写Django自带的后台相关操作,默认为空。
  • apps.py:定义应用信息。
  • models.py:设置数据模型,即定义数据表结构。
  • tests.py:用于编写测试代码的文件。
  • views.py:包含视图模型的相关操作,即定义业务逻辑。

创建模型

创建模型其实就是创建表,Django通过Model操作数据库,自动生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,Django自动完成对数据的操作,只要能够设计Model即可。

打开models.py文件、settings.py文件,添加以下相应的代码。

# models.py文件添加下面代码,可以创建数据表格对应的数据模型
from django.db import models # 引用数据库创建模块
class Test(models.Model): # 定义表结构,下面是字段列表
    username = models.CharField(primary_key=True,max_length=20) 
    password = models.CharField(max_length=20) # 定义了password 字段,models.CharField相当于 varchar

# settings.py文件新的app:demo
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'demo'
]

创建表结构

python manage.py migrate
'''
Migrations for 'demo':
  demo/migrations/0001_initial.py
    - Create model Test
'''

在这里插入图片描述

让Django知在数据模型中有一些变更。

python manage.py makemigrations demo
'''
Migrations for 'demo':
  demo/migrations/0001_initial.py
    - Create model Test
'''

创建demo数据表结构

python manage.py migrate demo
'''
Operations to perform:
  Apply all migrations: demo
Running migrations:
  Applying demo.0001_initial... OK
'''

返回客户端工具查看,可以发现新生成了demo_test表。

在这里插入图片描述

设计路由

路由就是根据不同的URL分发不同的信息。路由处理就是在服务器端接收到HTTP请求之后,能够对请求的路径字符串进行匹配处理,并根据URL调用相应的应用程序。

URL在Django中其实是由用户自己构造的,Django约定URL是在项目同名目录下的url.py文件的urlpatterns列表构造的。

# demo 应用中 view.py 文件,添加下面代码
from django.http import HttpResponse # 导入HTTP响应模块

def hi(request): # 定义视图函数
    return HttpResponse('Hi,my baby') # 设计响应内容,返回响应信息

# 编写路由,url.py 添加下面代码,绑定URL与视图函数
from demo import views # 导入模块视图

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hi/',views.hi) # 添加一个元素,定义路由
]

在浏览器中输入:http://127.0.0.1:8000/hi/ 就能看到响应信息,如下图。

在这里插入图片描述

设计视图

每一个URL都对应一个views视图函数名,视图函数名不能相同,否则会报错。Django约定视图函数写在APP应用里的views.py文件中。

# demo 应用中 view.py 文件,添加下面代码
from demo import views # 导入视图模块
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hi/',views.hi),
    url(r"^show_news/(\d+)/(\d+)$",views.show_news)

]

# 编写路由,url.py 添加下面代码,绑定URL与视图函数
from django.http import HttpResponse # 导入HTTP响应模块

def hi(request):
    return HttpResponse('Hi,my baby')

def show_news(request,a,b):
    return HttpResponse("<h1>新闻、界面<p>新闻类别:%s</p><p>当前页面:%s</p>"%(a,b))

在浏览器中输入:http://127.0.0.1:8000/hi/)show_news/2/3 就能看到响应信息,如下图。

在这里插入图片描述

设计模版

当用户发送请求的时候,视图返回一个响应,响应可以是一个重定向、一个404错误、一个XML文档、一张图片或者是一个HTML内容的网页。前面几个返回的信息比较有限,重点是HTML内容的网页,把这样的页面按规范写好,然后都放在项目根目录下的templates文件夹里,这样的页面被称为“模版”页面。

Django作为成熟的Web框架,需要一种很便利的方法动态生成HTML网页,因此有了模版这个概念。模版页面包含一些基础的HTML代码和一些特殊的语法,这些特殊的语法主要用于如何将动态数据插入HTML页面中。

静态部分:HTML、CSS、Javascript设计。

动态部分:通过Django动态框架设计。

在demo目录下,创建一个templates目录,并在templates下创建test.html文件,设计一个简单的表单页面,内容如下:

<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<form action="search" method="GET">
    <input type="text" name="name">
    <input type="submit" value="搜索">
</form>
</body>
</html>

demo 应用中 view.py 文件,添加下面代码,定义两个视图函数。

from django.http import HttpResponse

def hi(request):
    return HttpResponse('Hi,my baby')

def show_news(request,a,b):
    return HttpResponse("<h1>新闻、界面<p>新闻类别:%s</p><p>当前页面:%s</p>"%(a,b))

def f1(request):
    return render(request,"test.html")

def f2(request):
    request.encoding='utf-8'
    if 'name' in request.GET and request.GET["name"]:
        t = "你搜索的内容为:"+ request.GET['name']
    else:
        t = '提交的表单为空'
    return  HttpResponse(t)

编写路由,在url.py 添加下面代码,绑定URL与视图函数。

from demo import views
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hi/',views.hi),
    url(r"^show_news/(\d+)/(\d+)$",views.show_news),
    url(r"^search_form$",views.f1),
    url(r"search$",views.f2)
]

启动服务器:python manage.py runserver。浏览器输入http://127.0.0.1:8000/search_form,进一步输入网络爬虫,可以得到如下结果。

在这里插入图片描述

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

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

相关文章

Python中的并发编程(3)线程池、锁

concurrent.futures 提供的线程池 concurrent.futures模块提供了线程池和进程池简化了多线程/进程操作。 线程池原理是用一个任务队列让多个线程从中获取任务执行&#xff0c;然后返回结果。 常见的用法是创建线程池&#xff0c;提交任务&#xff0c;等待完成并获取结果&…

mysql 字符串合并方法以及合并为null问题

concat()不推荐 mysql一般提供了两种一种是concat()函数一种是concat_ws()函数&#xff0c;前者合并字符串有个弊端&#xff0c;合并字段不能有null值&#xff0c; 否则如下图合并后会是null concat_ws()推荐 concat_ws()函数可以解决合并字符串为null问题&#xff0c;conca…

人工智能期末复习重点【只针对(适合)个人】

第二章 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.框架题 12.1地震框架 12.2洪水框架 13.第二章总结 第三章 14. 15. 3.1.1 推理的定义 16. 3.1.2 推理方式及其分类 &#xff08;1&#xff09;确定性推理&#xff1a; u 推理时所用的 知识与证据 都是 确定的 &…

在 Qt Creator 中编写 Doxygen 风格的注释

2023年12月10日&#xff0c;周日上午 如何生成Doxygen 风格的注释 在需要Doxygen 风格注释的函数上方输入 /**&#xff0c;然后按下 Enter 键。Qt Creator 将自动为你生成一个注释模板。 输入&#xff0c;Qt Creator会自动帮你补全Doxygen标签 不得不说&#xff0c;写了Doxyge…

Linux库之动态库静态库

一、什么是库&#xff08;Library&#xff09; 二、库的分类 三、静态库、动态库优缺点 四、静态库的制作和使用 五、动态库的制作和使用 SO-NAME–解决主版本号之间的兼容问题 基于符号的版本机制 共享库系统路径 共享库的查找过程 有用的环境变量 gcc 编译器常用选项 Linux共…

私域爆款案例拆解-元气森林

一、背景调研 二、引流策略 三、私域运营策略

微信小程序---页面导航

1.声明式导航 &#xff08;1&#xff09;跳转到tabBar &#xff08;2&#xff09;跳转到非tabBar 注意&#xff0c;这个open-type"navigate"可以省略 &#xff08;3&#xff09;后退式导航 注意&#xff0c;如果只是后退到上一个页面&#xff0c;可以省略delta属性…

TensorBoard使用和问题解决

一、什么是TensorBoard? TensorBoard 是一组用于数据可视化的工具&#xff0c;它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括&#xff1a; 可视化模型的网络架构跟踪模型指标&#xff0c;如损失和准确性等检查机器学习工作流程中权重、偏差和其他…

解决VMware Workstation安装VMware Tools显示灰色的办法

方法一&#xff1a; 1.关闭虚拟机&#xff1b; 2.在虚拟机设置分别设置CD/DVD、CD/DVD2和软盘为自动检测三个步骤&#xff1b; 3.再重启虚拟机&#xff0c;灰色字即点亮。 如果上述步骤不行&#xff0c;就执行 方法二&#xff1a; 1.关闭虚拟机&#xff1b; 2.打开VMware…

CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别

时隔一年没写CSDN笔记了&#xff0c;一些CESM的知识点我都快忘了。诶&#xff0c;主要是在国外办公室的网屏蔽了好多国内的网络&#xff0c;CSDN登不上&#xff0c;回家又不想干活。。。好吧&#xff0c;好多借口。。。 昨天师弟问我一些问题&#xff0c;想想要不可以水一篇小…

【基于LSTM的股票数据预测与分类】

基于LSTM的股票数据预测与分类 引言数据集与爬取数据处理与可视化股票预测与分类Flask页面搭建股票推荐功能创新点结论 引言 股票市场波动剧烈&#xff0c;对于投资者而言&#xff0c;精准的数据预测和分类是制定明智决策的基础。本文将介绍一种基于长短时记忆网络&#xff08…

智能优化算法应用:基于多元宇宙算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于多元宇宙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于多元宇宙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.多元宇宙算法4.实验参数设定5.算法结果6.…

超声波防爆气象仪是什么?

随着科技的不断进步&#xff0c;气象监测设备也在不断地升级换代。近日&#xff0c;一款超声波防爆气象仪引起了人们的关注。这款设备不仅可以提供精准的气象数据&#xff0c;还能在各种恶劣环境下保持稳定运行&#xff0c;为人们的生产生活提供全方位的气象服务。 一、超声波…

制作蓝牙小车(一)

制作控制蓝牙小车app 想制作一个蓝牙小车&#xff0c;通过手机app程序操控小车运行&#xff0c;制作分2个部分&#xff08;app制作&#xff0c;蓝牙小车硬件以及程序制作&#xff09;&#xff0c;先完成第一个部分app制作&#xff0c;本次app是通过androidstudio软件来制作安卓…

基于Java SSM框架高校校园点餐订餐系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架高校校园点餐订餐系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

【Fastadmin】根据Fieldlist键值组件做一个等级配置的完整示例

目录 1.效果展示&#xff1a; ​编辑 2.建表&#xff1a; 3.html页面 4.controller控制器 5.js 6.model 1.效果展示&#xff1a; 2.建表&#xff1a; 表名&#xff1a;fa_xxfb_config /*Navicat Premium Data TransferSource Server : rootSource Server Type …

城市生态与交通,数据可视化大屏,PSD源文件(ps大屏设计素材)

用酷炫的大屏展示其城市的生态与交通情况&#xff0c;辅助相关决策。好的大屏组件也可以让设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享城市生态与交通的大屏Photoshop源文件&#xff0c;开箱即用&#xff01;以下为部分截图示意。 若需更多的 智慧…

Gemini:AI领域的璀璨明星

随着人工智能技术的飞速发展&#xff0c;AI领域的竞争越来越激烈。在这个充满挑战与机遇的时代&#xff0c;一个备受瞩目的AI平台——Gemini&#xff0c;以其卓越的性能和广泛的应用前景&#xff0c;成为了人们关注的焦点。本文将详细介绍Gemini的背景、技术特点、应用场景以及…

利用Ransac算法进行平面拟合

RANSAC算法是“Random Sample Consensus”的缩写&#xff0c;它的全称是随机抽样一致性算法。算法可以从一组包含“局外点”的观测数据集中&#xff0c;通过迭代方式估计数学模型的参数。RANSAC算法是不确定的算法——它是由一定的概率得出一个合理的结果&#xff0c;为了提高概…

机器人制作开源方案 | 网球收纳机器人

作者&#xff1a;孙宇晗、刘子昊、单正扬、李悦、张紫琦 单位&#xff1a;山东大学&#xff08;威海&#xff09; 指导老师&#xff1a;庞豹 1. 场景调研 1.1 宏观背景 体育作为社会经济、政治、文化的重要组成部分,越来越受政府、社会、学校等各阶层的关注。近年来&#x…