01.Django入门

news2024/11/22 16:51:45

1.创建项目

1.1基于终端创建Django项目

  • 打开终端
  • 进入文件路径(打算将项目放在哪个目录,就进入哪个目录)

E:\learning\python\Django

  • 执行命令创建项目

F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe(Django-admin.exe所在路径) startproject 项目名称

如果所在环境的Scripts已经加入环境变量了,可以直接在终端写:

django-admin startproject 项目名称

eg:创建项目名为MySite的命令:
F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe startproject MySite

1.2 基于Pycharm创建Django项目

1.新建项目,选择Django,选择项目所在位置和解释器,然后点击“创建”:

在这里插入图片描述

说明:

  • 通过终端的命令行,创建的项目,是比较标准的

  • 通过pycharm创建的项目,在么标准的基础上默认加了:

    • 创建了一个templates目录【删除】

    • Pycaharm在setting.py中的TEMPLATES配置项中添加了如右图所示部分(Pycharm加这个的意思是:找模板就去外层的templates目录找)【删除】

在这里插入图片描述

2.默认项目结构介绍

MySite
├─MySite
│  └─asgi.py 【异步式的接收网络请求】【默认不动】
│  └─wsgi.py【同步式的接收网络请求】【默认不动】
│  └─settings.py 【项目的配置文件:链接数据库,注册APP】【经常修改的文件】
│  └─urls.py 【URL和函数的对应关系】【经常修改的文件】
│  └─__init__.py
└─manage.py 【项目的管理:启动项目、创建app、数据管理】【默认不动,经常使用】

注意:使用tree命令显示不完全的原因: tree /f

3.APP

总项目

  • app,用户管理【独立的表结构、函数、HTML母版、CSS】
  • app,订单管理 【独立的表结构、函数、HTML母版、CSS】
  • app,后台管理 【独立的表结构、函数、HTML母版、CSS】
  • app,API 【独立的表结构、函数、HTML母版、CSS】

注意:我们在起初刚开始的时候,项目简单,开发简洁,用不到多APP,一般情况下只创建1个APP即可

3.1 APP 的创建

打开Command Prompt终端,在终端输入:

python maneage.py startapp app名

E:.                 
│  manage.py        
│                  
├─app01
│  │  admin.py 【默认不用动,Django默认提供了admin后台管理】
│  │  apps.py 【默认不用动,app的启动类】 
│  │  models.py 【重要,对数据库进行操作的】
│  │  tests.py【默认不动。用来做单元测试的】
│  │  views.py 【重要,定义url对应的视图函数】
│  │  __init__.py
│  │
│  └─migrations 【默认不用动,它是Django的module对数据库字段进行修改的时候,用来做记录的】
│          __init__.py
│
└─MySite
    │  asgi.py
    │  settings.py
    │  urls.py
    │  wsgi.py
    │  __init__.py
    │
    └─__pycache__
            settings.cpython-39.pyc
            __init__.cpython-39.pyc

4.Django快速上手

4.1打通基础数据流

注意:在运行Django程序之前,确保APP已注册

步骤:
1.在app01中的apps.py中找到App01Config,然后在settings.py中的INSTALLED_APPS项写入:‘app01.apps.App01Config’

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config'#注册APP01
]

2.在urls.py中编写URL和视图函数对应关系

在MySite中的urls.py中先引入app01中的views.py中视图函数,再将函数和URL对应声明

在这里插入图片描述

  1. views.py中编写视图函数:

在这里插入图片描述

  1. 启动Django项目:

    • 通过命令行启动:

      python manage.py runserver

    • Pycharm启动:可以编辑配置之后,点击播放按钮启动

在这里插入图片描述

	这样项目基本数据流向就跑通了

4.2 templates 模板

注意:

  1. 优先去项目根目录的template中寻找【要提前在settings.py中配置DIRS
  2. 如果哦没找到,再根据app的注册顺序,在每个app下的templates目录去找

在这里插入图片描述

4.2.1 Django模板语法

(1)本质:在HTML中写一些占位符,由数据对占位符进行替换和处理。模板语法的原理如下图所示:

在这里插入图片描述

注意:

整个过程render 的内部:

1.读取含有模板语法的HTML文件

2.内部进行渲染(模板语法执行并替换数据),最终只得到含有HTML标签的字符串

3.将渲染(替换)完成的字符串返回给用户浏览器

(2)模板语法演示:

views.py中对应的处理函数部分:

def usetemp(request):
    # 变量
    name = '小明'
    # 列表
    arr = ['小红', '小兰', '小白']
    # 字典
    dic = {'name': '小明', 'age': 18, 'address': '北京'}
    # 列表套字典
    lic = [
        {'name': '小兰', 'age': 18, 'address': '上海'},
        {'name': '小红', 'age': 18, 'address': '天津'},
        {'name': '小白', 'age': 18, 'address': '广东'}
    ]
    return render(request, 'usetemp.html',
                  {'name': name,
                   'friends': arr,
                   'userinfo': dic,
                   'friends_info': lic
                   })

带有模板语法的usetemp.html代码:

<body>
<h1>变量</h1>
<span>{{ name }}</span>
<h1>数组</h1>
<ul>
    <li>{{ friends.0 }}</li>
    <li>{{ friends.1 }}</li>
    <li>{{ friends.2 }}</li>
</ul>
<ul>
    {% for item in friends %}
    <li>{{ item }}</li>
    {% endfor %}
</ul>
<h1>字典</h1>
<span>{{ userinfo.name }}</span>
<span>{{ userinfo.age }}</span>
<span>{{ userinfo.address }}</span>
<span>遍历字典索引</span>
<ul>
    {% for index in userinfo.keys %}
        <li> {{ index }}</li>
    {% endfor %}

</ul>
<span> 遍历字典值</span>
<ul>
    {% for value in userinfo.values %}
    <li>{{ value }}</li>
    {% endfor %}

</ul>
<span>循环字典的每一项</span>
<ul>
    {% for key,value in userinfo.items %}
    <li>{{ key  }} = {{ value }}</li>
    {% endfor %}

</ul>
<span>{{ friends_info.0 }}</span>
<br/>
<span>{{ friends_info.0.name }}</span>
<h1>条件语句</h1>
{% for item in friends_info %}
    {% if item.name == '小芳' %}
        <span> 小芳:{{ item.age }}</span>
    {% elif item.name == '小红'%}
        <span>小红年龄:{{ item.age }}</span>
    {% else %}
        <span> 没有符合条件的用户</span>
    {% endif %}
{% endfor %}

</body>

4.3 静态文件

在开发过程中一般将:

  • 图片
  • CSS
  • JS

都会被当做静态文件处理。

静态文件在Django项目中,步骤:

  1. 先在app的目录下创建static 文件夹,如static/img,js,css,plugins

2.在Django中所有静态资源的引入:

{% load static %}

使用的路径写法:{% static 'img/1.jpeg' %}

5.请求和响应

常见的请求和响应

request是一个对象,封装了用户发过来的所有数据

    # 1.获取请求方式get/POST
    print(request.method)

    # 2.获取咋URL上传递的参数值,
    print(request.GET['a'])

    # 3.post请求会在请求体中传递数据
    print(request.POST)

    # 4.【响应】HttpResponse("OK"):将字符串的内容返回给请求者
    # return HttpResponse('OK')

    # 5.【响应】render:读取HTML文件的内容,再进行渲染(替换),生成新的字符串,返回给用户的浏览器
    # return render(request, 'req.html')

    # 6.【响应】redirect:强制浏览器重定向
    return redirect('https://www.baidu.com')

注:

在使用表单提交数据时,会触发Django的安全机制,只需要在form标签开头加入:{% csrf_token %}

<form method="POST" action="login">
    {% csrf_token %}
</form>

在这里插入图片描述

6.数据库操作

MySql+pymysql

import pymysql
#1.连接MysQL
conn = pymysql.connect(host="127.0.0.1",port=3306,user='root',passwd="root123", charset='utf8', db=' unicom ' )
cursor = conn.cursor (cursor=pymysql.cursors.Dictcursor)
#2.发送指令
cursor.execute( "insert into admin(username , password,mobile)values('wupeiqi' , 'qwe123','15155555555')")
conn.commit( )
#3.关闭
cursor.close( )
conn.close()

在Django中一般不直接通过pymysql操作MySQL,太繁琐了。Django为我们提供了ORM框架

在这里插入图片描述

6.1 安装ORM要用的第三方模块

pip install mysqlclient

6.2 ORM

ORM 的作用:

  • 创建和增删改查数据库中的表(不用写SQL语句)【注意:无法创建数据库】
  • 操作表中的数据

ORM连接MySQL的步骤:

  1. 创建数据库,启动MySQL,创建数据库

CREATE DATABASE CHARACTER SET utf8;

  1. 在settings.py中进行配置和修改
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'XXX',  # 数据库名字
        'USER': 'root',
        'PASSWORD': 'XXX',
        'HOST': '127.0.0.1',  # 要连接哪台机器上的MySQL
        'PORT': '3306'  # 端口号
    }
}

6.3. 基于Django去操作表:

6.3.1 创建表

1.在app下的models.py中编辑:

from django.db import models

class UserInfo(models):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

2.在终端运行命令:

python manage.py makemigrations
python manage.py migrate

注意:在运行命令之前,确保APP已经提前注册

6.3.2 修改表

在表中新增列时,由于已经存在的列中可能已有数据, 所以新增列必须要指定新增列对应的数据:

  • 选择:1,那么就手动输入值
  • 选择:2,那么放弃新增列(应该在新增列中设置默认值)
# 设置默认值
address = models.CharField(default='XXX街道XXX号')
# 允许为空
data = models.IntegerField(null=True, blank=True)

注意:

以后在开发中如果想要对表结构进行调整:

  • 在models.py文件中操作类即可
  • 数据库迁移命令:

python manage.py makemigrations
python manage.py migrate

6.3.3对表字段的增删改查

# 1.新建数据
# models.Department.objects.create(title='活动', segment='销售部')
# models.UserInfo.objects.create(name='xijing', password='123456', age=18)

# 2.删除数据
# 删掉UserInfo里面id=2的记录
# models.UserInfo.objects.filter(id=2).delete()
# 删掉Departemt里面的所有记录
# models.Department.objects.all().delete()

# 3.查数据
#queryset = models.UserInfo.objects.all()
# 得到的是一个列表
# for item in queryset:
#     print(item.name,item.age,item.password)
# 获取id=5的数据
# row_data = models.UserInfo.objects.filter(id=5).first()
# print(row_data)

# 4.更新数据
# 将UserInfo表里面所有数据的密码字段全都更新成999
# models.UserInfo.objects.all().update(password='9999')
# 筛选条件
models.UserInfo.objects.filter(id=5).update(password='123456')

7.案列展示流程

7.1展示用户列表

  • url
  • 函数
    • 获取所有用户信息
    • HTML渲染

7.2添加用户信息

  • url
  • 函数
    • GET,看到页面,输入内容
    • POST,提交写入数据库

7.3删除用户

  • url
  • 函数
    • http://127.0.0.1:8000/info/delet?id=5
    • def handlefunc(request):
      id = request.GET.get(‘id’)
      module.UserInfo.obejects.filter(id=5).delete()
      ects.all().update(password=‘9999’)

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

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

相关文章

protobuf+netty自定义编码解码

protobufnetty自定义编 项目背景 protobufnetty自定义编码解码 比如心跳协议&#xff0c;客户端请求的协议是10001&#xff0c;在java端如何解码&#xff0c;心跳返回协议如何编码&#xff0c;将协议号带过去 // 心跳包 //10001 message c2s_heartbeat { }//10002 message …

【数据分享】2006-2021年我国省份级别的市政公用设施建设固定资产投资相关指标(30多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国省份级别的市政设施水平相关指标、2006-2021年我国省份级别的各类建设用地面积数…

02.案列项目Demo

1.创建项目 1. 创建项目 用pycharm 选择对应的编译器&#xff0c;输入对应的文件名&#xff0c;点击创建项目。删除默认外层生成的template和DIRS 配置项&#xff1a; 2. 创建App 创建appo1的命令&#xff1a; python manage.py startapp app01 如果使用pycharm>tool>…

Qt项目报错:Cannot run compiler ‘clang++‘. /bin/sh: 1: clang++: not found

在一台旧电脑上装了深度系统&#xff0c;装了Qt&#xff0c;导入项目&#xff0c; build提示 clang找不到&#xff1a; Project ERROR: Cannot run compiler clang. Output: /bin/sh: 1: clang: not found Maybe you forgot to setup the environment? Error while parsing …

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑工业出版社,2022.

​&#xff18;th参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑工业出版社&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&a…

2022数学建模国赛C题官网展示论文C155论文复现

2022数学建模国赛C题C155论文复现 1.内容比对2.第一问第二小问复现代码2.1 页表合并2.2 数据的正态性检验2.2.1数据的正态性检验效果图 2.3不满足正态性&#xff0c;进行中心化对数比变换2.3.1 核心步骤-inf用0值替换2.3.2中心化对数比变换效果图 2.4描述性统计2.5 箱线图绘制 …

回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&a…

五种网络IO模型

五种模型出自&#xff1a;RFC标准。可参考&#xff1a; 《UNIX网络编程-卷一》 6.2 很多程序员是从高级语言的网络编程/文件操作了解到nio&#xff0c;继而了解到五种io模型的&#xff1b; 这五种io模型不止用于网络io “阻塞与****系统调用”是怎么回事&#xff1f;我知道了线…

Redis之持久化机制

文章目录 一、redis持久化二、持久化方式2.1. RDB方式2.1.1 RDB手动2.1.2 RDB自动2.1.3RDB优缺点 2.2AOF方式2.2.1 AOF写数据遇到的问题2.2.2 AOF重写方式 二、RDB和AOF优缺点对比总结 一、redis持久化 Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&a…

Azure防火墙

文章目录 什么是Azure防火墙如何部署和配置创建虚拟网络创建虚拟机创建防火墙创建路由表&#xff0c;关联子网、路由配置防火墙策略配置应用程序规则配置网络规则配置 DNAT 规则 更改 Srv-Work 网络接口的主要和辅助 DNS 地址测试防火墙 什么是Azure防火墙 Azure防火墙是一种用…

ELK日志监控系统搭建docker版

目录 日志来源elk介绍elasticsearch介绍logstash介绍kibana介绍 部署elasticsearch拉取镜像&#xff1a;docker pull elasticsearch:7.17.9修改配置⽂件&#xff1a;/usr/share/elasticsearch/config/elasticsearch.yml启动容器设置密码&#xff08;123456&#xff09;忘记密码…

Redis从基础到进阶篇(一)

目录 一、了解NoSql 1.1 什么是Nosql 1.2 为什么要使用NoSql 1.3 NoSql数据库的优势 1.4 常见的NoSql产品 1.5 各产品的区别 二、Redis介绍 2.1什么是Redis 2.2 Redis优势 2.3 Redis应用场景 2.4 Redis下载 三、Linux下安装Redis 3.1 环境准备 3.2 Redis的…

Win11右键显示更多选项

不需要重启电脑&#xff0c;重启资源管理器即可&#xff0c;用命令&#xff1a;taskkill /f /im explorer.exe & start explorer.exe

一、Kafka概述

目录 1.3 Kafka的基础架构 1.3 Kafka的基础架构 Producer&#xff1a;消息生产者&#xff0c;就是向 Kafka broker 发消息的客户端Consumer&#xff1a;消息消费者&#xff0c;向 Kafka broker 取消息的客户端。Consumer Group&#xff08;CG&#xff09;&#xff1a;消费者组&…

浅析深浅拷贝

我们在对对象进行复制时就用到深浅拷贝。 一、普通复制 <script>const people{name:tim,age:22}const testpeople;console.log(test);//tim 22test.age20;console.log(test);//tim 20console.log(people);//tim 20 </script> 控制台打印结果&#xff1a; 之所以…

使用struct解析通达信本地Lday日线数据

★★★★★博文原创不易&#xff0c;我的博文不需要打赏&#xff0c;也不需要知识付费&#xff0c;可以白嫖学习编程小技巧&#xff0c;喜欢的老铁可以多多帮忙点赞&#xff0c;小红牛在此表示感谢。★★★★★ 在Python中&#xff0c;struct模块提供了二进制数据的打包和解包…

使用transformers生成文本Generating text with transformers

到目前为止&#xff0c;您已经看到了Transformers架构内部的一些主要组件的高级概述。但您还没有看到从头到尾的整体预测过程是如何工作的。让我们通过一个简单的例子来了解。在这个例子中&#xff0c;您将查看一个翻译任务或一个序列到序列的任务&#xff0c;这恰好是Transfor…

破解难题:如何应对项目中的‘老油条’障碍

引言 在项目管理的实践中&#xff0c;我们经常遇到各种各样的人员挑战。其中&#xff0c;有一种特殊的挑战被称为“老油条”现象。这些“老油条”通常在表面上表现得非常配合&#xff0c;但在实际工作中却常常没有任何进展。这种情况不仅会影响项目的进度&#xff0c;还可能对…

机器学习---常见的距离公式(欧氏距离、曼哈顿距离、标准化欧式距离、余弦距离、杰卡德距离、马氏距离、切比雪夫距离、闵可夫斯基距离、K-L散度)

1. 欧氏距离 欧几里得度量&#xff08;euclidean metric&#xff09;&#xff08;也称欧氏距离&#xff09;是一个通常采用的距离定义&#xff0c;指在m维空 间中两个点之间的真实距离&#xff0c;或者向量的自然长度&#xff08;即该点到原点的距离&#xff09;。在二维和三维…