app开发必须要网站吗,网站做自适应好不好,专业别墅设计装修,网站开发实现顺序七、在项目下新建 templates 路径
在工程上#xff0c;右键#xff0c;添加templates目录 注意*: 此目录下即用来存放我们的html文件#xff1b;
此目录一般是与app的主目录是平级的。当然也可以建立在app的目录下#xff0c;主要取决于你的模板#xff0c;一般是全局…七、在项目下新建 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-hansTIME_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, # HOSTPOST: 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 ROOTlocalhost (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_keyTrue: 该字段为主键studentNum models.CharField(学号, primary_keyTrue, max_length15)# 姓名 字符串 最大长度20name models.CharField(姓名, max_length20)# 年龄 整数 nullFalse, 表示该字段不能为空age models.IntegerField(年龄, nullFalse)# 性别 布尔类型 默认True: 男生 False:女生sex models.BooleanField(性别, defaultTrue)# 手机 uniqueTrue 该字段唯一mobile models.CharField(手机, uniqueTrue, max_length15)# 创建时间 auto_now_add只有在新增的时候才会生效createTime models.DateTimeField(auto_now_addTrue)# 修改时间 auto_now 添加和修改都会改变时间modifyTime models.DateTimeField(auto_nowTrue)# 指定表名 不指定默认APP名字——类名(app_demo_Student)class Meta:db_table student
学生社团信息表
class studentUnion(models.Model):# 自增主键, 这里不能设置default属性负责执行save的时候就不会新增而是修改元素id models.IntegerField(primary_keyTrue)# 社团名称unionName models.CharField(社团名称, max_length20)# 社团人数unionNum models.IntegerField(人数, default0)# 社团负责人 关联Student的主键 即studentNum学号 一对一的关系,on__delete 属性在django2.0之后为必填属性后面会介绍unionRoot models.OneToOneField(Student, on_deletemodels.CASCADE)class Meta:db_table student_union
OneToOneField 一对一
ForeignKey: 一对多
ManyToManyField 多对多(没有ondelete 属性)1启动mysql服务启动服务我们在终端执行如下命令net start mysql
D:\PythonSourceCode\myDjangonet start mysql
请求的服务已经启动。请键入 NET HELPMSG 2182 以获得更多的帮助。D:\PythonSourceCode\myDjango
2服务启动成功之后需要登录的时候输入命令 mysql -u root -p在输入密码登录。
D:\PythonSourceCode\myDjangomysql -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 charsetutf8;
mysql create database django_mysql charsetutf8;
Query OK, 1 row affected (0.02 sec)mysql
4创建完django_msql库之后我们在终端执行如下命令,他的作用是将models文件生成一个迁移文件 python manage.py makemigrations
D:\PythonSourceCode\myDjangopython 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\myDjangopython 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(nametom1)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(studentNumstudentNum)# 设置student的name为jackstudent.name jackstudent.save()return HttpResponse(修改成功.)
urls.py 文件中 urlpatterns中配置文件中的配置如下
path(modify/studentNum, views.modify),修改学号4767882034的name为jack
删除 删除def delete(request, studentNum):student Student.objects.get(studentNumstudentNum)student.delete()return HttpResponse(删除成功.)
urls.py 文件中 urlpatterns中配置文件中的配置如下
path(delete/studentNum, views.delete),