1-2.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之二

七、在项目下新建 templates 路径

在工程上,右键,添加templates目录
在这里插入图片描述
在这里插入图片描述
注意*:
此目录下即用来存放我们的html文件;

此目录一般是与app的主目录是平级的。当然也可以建立在app的目录下,主要取决于你的模板,一般是全局使用呢,还是专门服务于某个app;
请务必设置项目自动检索此目录,方法如下:

 1. 打开项目中的 settings.py 文件2. 找到变量 TEMPLATES ,确认其键名为 DIRS 的键值是否为:[os.path.join(BASE_DIR, 'templates')]

在这里插入图片描述
八、在项目下新建 static 路径

此目录下即用来存放我们的静态文件:img、css等;
此目录一般是与app的主目录是平级的,也可自行选择目录;
请设置自动检索此目录,方法如下:

 1. 打开项目中的 settings.py 文件2. 末尾处新增变量 STATICFILES_DIRS 并赋值为:[os.path.join(BASE_DIR, 'static')]

在这里插入图片描述
九、Django LANGUAGE_CODE和TIME_ZONE设置

将setting.py文件内

LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘UTC’

修改为

LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'

十、为MTV模型的各文件建立联系

在这里插入图片描述
我们以 http://127.0.0.1:8000/index 简单作下说明:
1.用户提交Request请求:把浏览器中url地址提交给Django服务器
2.Request首先到达的淡蓝色区域,你可以理解为Django项目中的 urls.py 文件,在此文件中会去根据你事先在 urlpatterns 列表中定义好的url路径去确定 index/ 指向哪个 Views文件,即你编写好的某个app目录下的 views.py 文件
3.views.py 文件中的函数render(request,‘xxx.html’,model_Var) 将会获取数据模型:Models 和 模板网页:Templates,在三者的共同渲染下,给客户端返回 Response,呈现出完整网页。
具体方法
(1)在templates文件夹上右键,新建home.html文件,并输入简单内容。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)在urls.py 文件中添加路由路径
在这里插入图片描述
(3)在views.py 文件中构造render(request,templates,model)函数
在这里插入图片描述
十一、编译运行
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
十二、连接mySql数据库并使用 models.py

settings.py配置信息的内容,其中DATABASES是用来管理数据库配置的,默认是sqlite3数据库,所以我们需要将其修改成mysql数据库。

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases# 数据库配置 默认的数据库为sqlite
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 数据库引擎'NAME': 'django_mysql', # 数据库名'USER': 'root', # 账号'PASSWORD': 'root', # 密码'HOST': '127.0.0.1', # HOST'POST': 3306, # 端口}
}

字段名称代码中都添加了相应说明,ENGINE为MYSQL数据库引擎,这个当然不会凭空出现,需要我们去安装

安装pymysql

pip3 install pymysql

项目中配置

在最开始的项目包下的__init__.py中进行如下配置

"""
setting中的配置默认为sqlite3数据库 当需要修改成MySql时
并且在setting.py的同级目录的__init__.py 加入如下配置
否则会报错: Error loading MySQLdb module.
"""
import pymysql
pymysql.install_as_MySQLdb()

如果mysql配置信息错误(用户名、密码、host等)控制台会报如下异常

pymysql.err.OperationalError: (1045, "Access denied for user 'ROOT'@'localhost' (using password: YES)")

在app(我的是myFirstWeb)文件的models.py文件中 创建Student(学生信息)和StudentUnion(社团信息)

models.py:数据模块,用于数据库设计

from django.db import models# Create your models here."""
创建学生信息表模型
""""""该类是用来生成数据库的 必须要继承models.Model
"""class Student(models.Model):"""创建如下几个表的字段"""# 学号 primary_key=True: 该字段为主键studentNum = models.CharField('学号', primary_key=True, max_length=15)# 姓名 字符串 最大长度20name = models.CharField('姓名', max_length=20)# 年龄 整数 null=False, 表示该字段不能为空age = models.IntegerField('年龄', null=False)# 性别 布尔类型 默认True: 男生 False:女生sex = models.BooleanField('性别', default=True)# 手机 unique=True 该字段唯一mobile = models.CharField('手机', unique=True, max_length=15)# 创建时间 auto_now_add:只有在新增的时候才会生效createTime = models.DateTimeField(auto_now_add=True)# 修改时间 auto_now: 添加和修改都会改变时间modifyTime = models.DateTimeField(auto_now=True)# 指定表名 不指定默认APP名字——类名(app_demo_Student)class Meta:db_table = 'student'"""
学生社团信息表
"""class studentUnion(models.Model):# 自增主键, 这里不能设置default属性,负责执行save的时候就不会新增而是修改元素id = models.IntegerField(primary_key=True)# 社团名称unionName = models.CharField('社团名称', max_length=20)# 社团人数unionNum = models.IntegerField('人数', default=0)# 社团负责人 关联Student的主键 即studentNum学号 一对一的关系,on__delete 属性在django2.0之后为必填属性后面会介绍unionRoot = models.OneToOneField(Student, on_delete=models.CASCADE)class Meta:db_table = 'student_union'"""
OneToOneField: 一对一
ForeignKey: 一对多
ManyToManyField: 多对多(没有ondelete 属性)
"""

(1)启动mysql服务,启动服务,我们在终端执行如下命令:net start mysql

D:\PythonSourceCode\myDjango>net start mysql
请求的服务已经启动。请键入 NET HELPMSG 2182 以获得更多的帮助。D:\PythonSourceCode\myDjango>

(2)服务启动成功之后,需要登录的时候输入命令:
mysql -u root -p,在输入密码登录。

D:\PythonSourceCode\myDjango>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 8.0.23 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

(3)在利用models.py文件生成数据库表之前,我们需要手动的先创建数据库django_mysql支持中文,我们在终端执行如下命令:
create database django_mysql charset=utf8;

mysql> create database django_mysql charset=utf8;
Query OK, 1 row affected (0.02 sec)mysql>

(4)创建完django_msql库之后,我们在终端执行如下命令,他的作用是将models文件生成一个迁移文件
python manage.py makemigrations

D:\PythonSourceCode\myDjango>python manage.py makemigrations
Migrations for 'myFirstWeb':myFirstWeb\migrations\0001_initial.py- Create model Student- Create model studentUnionD:\PythonSourceCode\myDjango>

在这里插入图片描述
(5)迁移文件生成完毕,在终端执行如下命令:
python manage.py migrate

会将迁移文件的内容作用到数据库中,生成表或者修改字段属性,控制台输出如下,则表示执行成功

D:\PythonSourceCode\myDjango>python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, contenttypes, myFirstWeb, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_alter_user_first_name_max_length... OKApplying myFirstWeb.0001_initial... OKApplying sessions.0001_initial... OKD:\PythonSourceCode\myDjango>

查看我们的django_mysql数据库,其中student和student_union就是用models文件生成的表,其他的表是项目自动生成的,暂时可以先不用管,用Navicat Premium 15软件连接mysql数据库课,并查看django_mysql数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

至此Django利用models文件创建数据库表的功能已经完毕。

十三、接下来用代码的方式演示一下Django如何进行增删改查

增加数据
为了提供一些测试数据,这里用for循环批量的加了几条简单的数据。
在views.py文件中添加:

from django.http import HttpResponse
from myFirstWeb.models import Student
import random# Create your views here."""
插入测试数据
"""def insert(request):# 随机整数 作为学号for i in range(0, 5):studentNum = int(random.uniform(0, 1) * 10000000000)# 从models文件中获取student对象student = Student()# 给对象赋值student.studentNum = studentNumstudent.name = 'tom' + str(i)student.age = 15student.sex = random.choice([True, False])student.mobile = int(random.uniform(0, 1) * 10000000000)# 插入数据student.save()return HttpResponse('数据插入完毕')

urls.py 文件中 urlpatterns中配置

path('insert/', views.insert),

编译运行,浏览器中访问http://localhost:8000/insert/ 浏览器显示‘数据插入完毕
在这里插入图片描述
查询数据库,发现有5条数据,也就是插入成功
在这里插入图片描述
查询数据

"""
查询
"""def find(request):# sql = 'select * from student'# django 也可以执行原生的sql语句# result = Student.objects.raw(sql)# 查询name = tom1的数据result = Student.objects.filter(name='tom1')"""result为<class 'django.db.models.query.QuerySet'>的对象需要进行数据处理"""arr = []for i in result:content = {'学号': i.studentNum, '姓名': i.name, '性别': i.sex}arr.append(content)print(arr)print(type(arr))return HttpResponse(arr)

配置urls,浏览器访问localhost:8000/find/
在这里插入图片描述

修改数据

"""
修改
"""
def modify(request, studentNum):# 通过学号获取student对象student = Student.objects.get(studentNum=studentNum)# 设置student的name为jackstudent.name = 'jack'student.save()return HttpResponse('修改成功.')

urls.py 文件中 urlpatterns中配置文件中的配置如下

path('modify/<studentNum>', views.modify),

修改学号4767882034的name为jack
在这里插入图片描述

删除

"""
删除
"""
def delete(request, studentNum):student = Student.objects.get(studentNum=studentNum)student.delete()return HttpResponse('删除成功.')

urls.py 文件中 urlpatterns中配置文件中的配置如下

path('delete/<studentNum>', views.delete),

在这里插入图片描述

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

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

相关文章

k8s-自动横向伸缩pod 根据CPU使用率,QPS访问数监控指标

k8s-自动横向伸缩pod 与节点 简述 我们可以通过调高ReplicationController、 ReplicaSet、 Deployment等可伸缩资源的rep让cas字段&#xff0c; 来手动实现pod中应用的横向扩容。 我们也可以通过增加pod容器的资源请求和限制来纵向扩容pod (尽管目前该操作只能在pod创建时&am…

记一次蚂蚁金服的面试经历

2015在实习的时候&#xff0c;当时一个一起实习的朋友在2019年3月份的时候突然在微信上找我&#xff0c;问我要不要面试下蚂蚁金服。问了下相关信息才知道他在2018年11月的时候进到蚂蚁金服&#xff0c;现在招人就想到了我&#xff0c;问我要不要试一下。刚开始还是有所顾虑的&…

记一次阿里巴巴一面的经历

上周在拉勾上收到一个蚂蚁金服的大哥要我的简历&#xff0c;当时很惊讶&#xff0c;居然有蚂蚁金服的找到我&#xff0c;然后想都没想就给了。受宠若惊呀&#xff0c;我知道自己的水平跟阿里的差距有多远&#xff0c;以前一直没用勇气去投&#xff0c;连试试都不敢。这次居然主…

Can‘t find a suitable configuration file in this directory or any parent. 报错解决错误

docker-compose 执行的时候报错 Cant find a suitable configuration file in this directory or any parent. Are you in the right directory? 解决办法: 1.把文件名重命名为docker-compose.yml&#xff0c;然后进入docker-compose.yml所在目录 2.然后在执行 docker…

Python获取两个列表list的不同之处

python Pycharm开发平台&#xff0c;列表listA包含listB&#xff0c;现在需要取出两个list中的不同值&#xff0c;diff_list[“23”, “78”] 说明&#xff1a; 转换为set再相减的目的去除list中重复的元素&#xff1b; # -*- coding: utf-8 -*-listA ["23", &quo…

jquery选择器《-》

2019独角兽企业重金招聘Python工程师标准>>> 1.DOM筛选&#xff0c;遍历查找相关方法 2.选择器中特殊符号的处理 3.改写原生js例子 a.表格隔行变色 b.tab标签页4.选择器的优化准则(初级)筛选 eq()选择指定索引的元素 filter(表达式)筛选指定表达式的元素first…

一文带你轻松搞懂事务隔离级别(图文详解)

本文由 SnailClimb 和读者 BugSpeak 共同完成。事务隔离级别(图文详解)什么是事务?事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元&#xff0c;这个转账会涉及到两个关键操作…

Yolo opencv刻度尺识别 刻度读数识别 水尺识别 水位识别源码

刻度识别项目 简介实现效果实现流程实现原理 刻度尺的标定 指针位置标定读数位置标定刻度线标定数字检测数字分割数字识别web部署附录简介 好久不见了&#xff0c;我看了一下我最近的博客到现在已经3个月时间没更新了。这是因为我最近都在忙毕业设计&#xff0c;所以一直没有时…

Python检查特定值是否包含在列表中

python 检查特定值是否包含在列表中 # -*- coding: utf-8 -*-listA ["23", "45", "78", "92"] strB "45" strC "12"if __name__ __main__:if strB in listA:print(%s is on the list % strB)if strC not in …

【数据结构与算法】通俗易懂说链表

一&#xff1a;概述链表&#xff08;Linked list&#xff09;由一些节点组成&#xff0c;物理存储非连续的线性表。其中每个节点都会存储下个节点的指针&#xff0c;由于实际存储空间不连续&#xff0c;对链表插入节点&#xff0c;删除节点可以达到O(1)的复杂度&#xff0c;但是…

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 GitHub参考代码链接 我修改后的代码百度网盘链接 密码&#xff1a;2mzl 数据集链接 密码&#xff1a;06dj 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用&#xff0c;有问题欢迎询问。 文章目录 Yolov5实现…

五、QPushButton按钮和QLineEdit控件操作

在第四节基础上,下面来进行QPushButton按钮和QLineEdit控件操作。 1.在主界面添加三个QLineEdit编辑框(其控件对象依次为lineEditNum1、lineEditNum2、lineEditSum)存放整数和一个按钮(其控件对象btnCalculate及5个QLable,进行2个数和的计算。 2.为按钮添加信号槽函数 单…

JVM史上最佳入门指南

提到Java虚拟机&#xff08;JVM&#xff09;&#xff0c;可能大部分人的第一印象是“难”&#xff0c;但当让我们真正走入“JVM世界”的时候&#xff0c;会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的&#xff0c;其实是恐惧本身。而作为整个JVM系列的首篇&…

Docker Registry 删除镜像并清理

目录 修改Docker Registry配置使用Registry V2 RestfulAPI 删除镜像Docker Registry GC回收空间使用UI管理Docker Registry 修改Docker Registry配置 配置开启删除功能:config.yml version: 0.1 log:fields:service: registry storage:delete:enabled: truecache:blobdescri…

1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作&#xff1a; 所有路由不能全部都在myDjango下的urls.py路由文件中&#xff0c;一个app创建一个路由分发文件urls.py&#xff0c; 在myDjango下的urls.py路由文件中只对每…

阿里《Java手册》做一个有技术情怀的人

导读最近重温了阿里的《码出高效Java开发手册》&#xff0c;感觉最后一页“聊聊成长”这一小块的内容写的很棒&#xff0c;特意把它复制出来&#xff0c;送给每一个技术人&#xff0c;愿你做一个有技术情怀的人。正文成长并没有直线式的捷径&#xff0c;“不走弯路就是捷径”这…

安卓应用在各大应用市场上架方法整理

安卓应用在各大应用市场上架方法整理 正在上传…重新上传取消​ ASO优化师-酱紫 酱紫ASO、ASA推广运营研究 ​关注她 1 人赞同了该文章 想要把APP上架到应用市场都要先注册开发者账号才可以。这里的方法包括注册帐号和后期上架及一些需要注意的问题。注意&#xff1a;首次…

Linux Shell编程之脚本执行方式

1.新建bash脚本文件 打开命令终端 touch hello.sh vim hello.sh2.编辑bash文件 #!/bin/bash # this is a test programerecho "hello word"3.脚本执行 赋予执行权限&#xff0c;直接运行 chmod 755 hello.sh ./hello.sh输出结果&#xff1a;

经典面试题|讲一讲JVM的组成

JVM&#xff08;Java 虚拟机&#xff09;算是面试必问的问题的了&#xff0c;而但凡问 JVM 一定会问的第一个问题就是&#xff1a;讲一讲 JVM 的组成&#xff1f;那本文就注重讲一下 JVM 的组成。 首先来说 JVM 的组成分为&#xff0c;整体组成部分和运行时数据区组成部分&…

ST-GCN训练自建数据集

参考了许多博文&#xff0c;慢慢地也就把st-gcn跑出来了&#xff0c;参考的文章一会附在文章里面&#xff0c;实测有用。 1.安装st-gcn 复现STGCN CPU版 &#xff08;ubuntu16.04pytorch0.4.0openposecaffe&#xff09;_Significance的博客-程序员秘密​​​​​​复现旧版STG…