Django
文章目录
1.Django创建
//安装 Django
python -m pip install Django
django-admin startproject My_Django
└──My_Django //根目录 │ ├── manage.py //管理 Django 项目的命令行工具。 │ └──My_Django //包含项目 │ │ ├── _init__.py //python的包证明是python文件(初始化文件) │ │ ├── settings.py //配置文件 │ │ ├── urls.py //目的url设置 │ │ ├── asgi.py //项目运行在 ASGI 兼容的 Web 服务器上的入口 │ │ └── wsgi.py //项目运行在 WSGI 兼容的 Web 服务器上的入口
//在与manage.py的同级目录下 python manage.py startapp polls
└──polls | |-migrations.py <!--会在应⽤booktest⽬录下的migrations⽬录中⽣成迁移⽂件--> | │ └── _init__.py | |-_init__.py <!--空⽂件,可以使⽬录当做包使⽤--> | |-admin.py <!--⽂件跟⽹站的后台管理相关--> | |-apps.py <!--项⽬整体配置⽂件--> | |-models.py <!--⽂件跟数据库操作相关--> | |-tests.py <!--⽂件⽤于开发测试⽤例--> | |-views.py <!--⽂件跟接收浏览器请求,进⾏处理,返回⻚⾯相关-->
应用创建成功后,需要安装才可以使⽤,也就是建立应用和项目之间的关联。
在 My_Django/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装。
2.编写第一个视图
polls/views.py
from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. I Love AL.")
需要将一个 URL 映射,因此需要创建 URLconf,在 polls 目录里新建一个
urls.py
文件。└──polls | |-migrations.py <!--会在应⽤booktest⽬录下的migrations⽬录中⽣成迁移⽂件--> | │ └── _init__.py | |-_init__.py <!--空⽂件,可以使⽬录当做包使⽤--> | |-admin.py <!--⽂件跟⽹站的后台管理相关--> | |-apps.py <!--项⽬整体配置⽂件--> | |-models.py <!--⽂件跟数据库操作相关--> | |-tests.py <!--⽂件⽤于开发测试⽤例--> | |-urls.py <!-- 用于创建URLconf--> | |-views.py <!--⽂件跟接收浏览器请求,进⾏处理,返回⻚⾯相关-->
polls/urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
下一步是要在根 URLconf 文件中指定我们创建的
polls.urls
模块。在My_Django/urls.py
文件的urlpatterns
列表里插入一个include()
, 如下from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
//运行测试 python manage.py runserver
用浏览器访问 http://localhost:8000/polls/ (注意不是http://localhost:8000/ !!!!!)
出现如下界面:
11.Django 配置信息
11.1 Settings.py文件介绍
该文件用于配置整个网站的环境和功能,核⼼配置必须有项目路径、秘钥配置、域名访问权限、App列表、中间件、资源文件、模板配置、数据库的连接方式。
项目路径 BASE_DIR
主要通过OS模块读取当前项⽬在计算机系统的具体路径,该代码在创建项目时自动生成,⼀般情况下无需修改 。
秘钥配置 SECRET_KEY
这是⼀个随机值,在项目创建时⾃动生成,⼀般情况下无需修改。主要用于重要数据的加密处理,CSRF机制和会话Session等数据加密。
调试模式 DEBUG
该值为布尔类型。如果项目部署上线,则改为False,否则会泄露项目的相关信息
域名访问权限 ALLOWED_HOSTS
当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序⽆法启动,如果想允许所有域名访问,可设置 ALLOW_HOSTS=[‘*’]
App列表 INSTALLED_APPS
告诉Django有哪些App。如果在项⽬中创建了App,就必须在App列表添加App名称。将My_Django项⽬已创建的App添加到App列表
INSTALLED_APPS= [ 'django.contrib.admin', # 内置的后台管理系统 'django.contrib.auth', # 内置的⽤户认证系统 'django.contrib.contenttypes', # 记录项⽬中所有model元数据(Django的ORM框架) 'django.contrib.sessions', # Session 会话功能,⽤于标识当前访问⽹站的⽤户⾝份,记录相关⽤户信息 'django.contrib.messages', # 消息提⽰功能 'django.contrib.staticfiles', # 查找静态资源路径 ]
资源路由 STATIC_URL
静态资源指的是⽹站中不会改变的⽂件。
11.2 数据库配置(连接Mysql)
默认情况下,Django连接的是自己带的sqlite
数据库。
-
Mysql提前创建好数据库
//在mysql命令行中创建一个叫cxb的数据库 create database cxb default charset utf8mb4;
-
安装包
pip install pymysql pip install mysqlclient
-
修改Django的
settings.py
文件创建一个Django项目,在项目文件夹下的
settings.py
下,找到原来的sqlite
配置文件。注销或删除
sqlite
配置,添加以下配置。DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 默认 'NAME': 'cxb', # 连接的数据库 'HOST': '127.0.0.1', # mysql的ip地址 'PORT': 3306, # mysql的端口 'USER': 'root', # mysql的用户名 'PASSWORD': '123456' # mysql的密码 } }
-
修改项目文件夹下的
__init.py
文件import pymysql pymysql.install_as_MySQLdb()
-
修改polls/model.py
from django.db import models # Create your models here. class UserInfo(models.Model): id = models.AutoField('id', primary_key=True) userName = models.CharField('姓名', max_length=20, null=False) loginNum = models.IntegerField('登录账号') userPassword = models.CharField('密码', max_length=16, null=False) class Meta: db_table = 'Person_Massage'
-
迁移数据库到Mysql
python manage.py makemigrations python manage.py migrate
-
在数据库中查看
use cxb; show tables;
-
下载Navicat fo MySQL
Navicat for mysql 破解版安装 - 代码如风~~~ - 博客园 (cnblogs.com)
连接并对表格数据进行修改
-
查看表格
//查看表的总体 DESC Person_massage;
//查看表的所有内容 select * from person_massage;
-
展示数据库的表格
polls.views.py
from django.shortcuts import render from .models import UserInfo def index(request): # 查询出Person对象信息,也就是数据表中的所有数据 # 一行数据就是一个对象,一个格子的数据就是一个对象的一个属性值 objs = UserInfo.objects.all() # locals函数可以将该函数中出现过的所有变量传入到展示页面中,即index.html文件中 return render(request, 'index.html', {"objs": objs})
polls/templates/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table border="1"> <thead> <tr> <td>id</td> <td>userName</td> <td>loginNum</td> <td>userPassword</td> </tr> </thead> <tbody> {% for obj in objs %} <tr> <td>{{ obj.id }}</td> <td>{{ obj.userName }}</td> <td>{{ obj.loginNum }}</td> <td>{{ obj.userPassword }}</td> </tr> {% endfor %} </tbody> </table> </body> </html>
启动
python manage.py runserver 127.0.0.1:8000
可见
12. 创建一个管理员账号
创建一个能登录管理页面的用户
python manage.py createsuperuser
输入用户名 邮箱 密码
将UserInfo添加到索引页面
polls/admin.py
from django.contrib import admin from .models import UserInfo admin.site.register(UserInfo)
启动开发服务器
python manage.py runserver
输入账号密码登录后看到如下界面
可以看到5个用户的信息
可以对用户信息进行修改
13. ORM - 单表实例
django中内嵌了ORM框架,不需要直接⾯向数据库编程,⽽是定义模型类,通过模型类和对象完成数据表的增删改查操作。
- Object: 对象 – 类
- Mapping : 映射
- Relations:关系,关系数据库中的表
通过类和对象操作对应的数据表,不需要写sql语句
13.1 数据库添加
polls/urls.py
path('', views.add_user),
polls/views.py
def add_user(request): user = UserInfo.objects.create(userName="lrq", loginNum=666666, userPassword="ffffff") print(user, type(user)) return HttpResponse("<p>数据添加成功!</p>")
13.2 数据库查找
使用 all() 方法来查询所有内容。
objs = UserInfo.objects.all()
filter() 方法用于查询符合条件的数据。
user = UserInfo.objects.filter(userName="lrq", loginNum=666666, userPassword="ffffff")
exclude() 方法用于查询不符合条件的数据。
user = UserInfo.objects.exclude(userName="lrq", loginNum=666666, userPassword="ffffff")
get() 方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个
如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误。
user = UserInfo.objects.get(userName="lrq", loginNum=666666, userPassword="ffffff")
order_by() 方法用于对查询结果进行排序。
注意:
- 参数的字段名要加引号
- 降序为在字段前面加个负号 -
user = UserInfo.objects.order_by("loginNum") user = UserInfo.objects.order_by("-loginNum")
reverse() 方法用于对查询结果进行反转。
user = UserInfo.objects.order_by("-loginNum").reverse()
count() 方法用于查询数据的数量返回的数据是整数。
user = UserInfo.objects.count() user = UserInfo.objects.filter(userName="lrq", loginNum=666666, userPassword="ffffff").count()
13.3 数据库删除
delete()
user = UserInfo.objects.filter(userName="lrq", loginNum=666666, userPassword="ffffff").delete() objs = UserInfo.objects.all().delete()
13.4 数据库修改
update(字段名=更改的数据)
objs = UserInfo.objects.all().update(loginNum=666666)
14. 将django部署到服务器上
14.1. 购买服务器
① 华为云服务器地址:
共建智能世界云底座-华为云 (huaweicloud.com)
② 阿里云服务器地址
③ 腾讯云服务器地址:
选择ubuntu版本购买
14.2. 服务器基础配置
# 在开始安装Python之前,请在系统上安装一些必需的软件包。登录到您的Ubuntu系统并执行以下命令:
sudo apt update
sudo apt install software-properties-common
# 打开系统上的终端,然后为系统配置Deadsnakes PPA。
sudo add-apt-repository ppa:deadsnakes/ppa
点击 [Enter]
apt install python3.9
# 等待安装完成。通过执行以下命令检查Python版本:
python3.9 -V
#安装pip
apt-get update
apt-get upgrade
# 安装pip3
sudo apt-get install python3-pip
# 检查 pip 是否安装成功
pip3 -v
14.3. 配置mysql
# 安装mysql service
cd /home
wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
dpkg -i mysql-apt-config_0.8.15-1_all.deb
选择 mysql-8.0
选择ok
apt-get update
apt-get install mysql-server
#启动mysql服务
mysql -u root -p
输入密码登录
输入quit退出
#安装mysql client
cd /home
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_5.7.34-1ubuntu18.04_amd64.deb
pip install mysqlclient
#安装pymysql
pip install pymysql
14.4. 将项目代码放置在linux上
方法一(如果项目代码在github上)
cd /home # 替换成你自己的项目git网址 git clone https://xxxxx #更新项目到本地 # myproj为git之后自动创建的项目文件夹 cd myproj git fetch --all && git reset --hard origin/master && git pull
方法二 (如果项目代码在本地)
利用SFTP(软件: Termius)
在左边找到项目在本地的目录,直接将目标文件拖到home目录下
14.5. 导入数据库
#进入数据库
mysql -u root -p
#创建一个名为cxbnb的数据库
mysql> create database cxbnb default charset=utf8mb4 default collate utf8mb4_unicode_ci;
# 新建用户cxb,密码为123456(不要使用默认的root用户管理,这样会和linux下的root冲突!!!)
mysql> create user 'cxb'@'localhost' identified by '123456';
#赋予cxb管理cxbnb的权限
mysql> grant all privileges on cxbnb .* to 'cxb'@'localhost';
#刷新权限
mysql> flush privileges;
#退出
mysql> flush privileges;
#重新登录查看是否正确设置
mysql -h localhost -u cxb -p
输入密码后看到以下界面即为成功
输入quit退出
#进入项目
cd /home/django-datta-able-master/
#根据requirement.txt安装依赖
# 开发机上导出(如果已经有不需要这一步)
pip3 freeze > requirements.txt
# 查看依赖
cat requirements.txt
# 上传服务器,然后在服务器安装依赖
pip install -r requirements.txt
#数据库迁移
python3 manage.py makemigrations
python3 manage.py migrate
14.6. 修改项目配置
#在setting.py中修改databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 默认
'NAME': 'cxbnb', # 连接的数据库
'HOST': '127.0.0.1', # mysql的ip地址
'PORT': 3306, # mysql的端口
'USER': 'cxb', # mysql的用户名
'PASSWORD': '123456' # mysql的密码
}
}
在setting.py中的输入服务器的ip
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78lrbSIS-1666154103480)(C:\Users\14179\AppData\Roaming\Typora\typora-user-images\image-20220512144700541.png)]
#在__init.py中加入
import pymysql
pymysql.install_as_MySQLdb()
14.7. 启动项目
python3 manage.py runserver 0.0.0.0:80
输入ip地址后即可看到
14.8. 反向代理
即使我们输入
python3 manage.py runserver 0.0.0.0:80
后可以看到网页,但是我们关掉服务器后,网页会挂掉,因此我们要用反向代理将该代码一直运行。
#查看是否有screen
which screen
#如果没有,进行安装
apt install screen
#进入项目目录
cd /home/django-datta-able-master
#创建虚拟终端
screen -R cxb
#进入后输入
python3 manage.py runserver 0.0.0.0:80
#点击 <Enter>
# Ctrl + A + D 退出
输入
screen -ls
查看已经存在的screen终端
#重新回到创建的终端
screen -r 74165.cxb
#删除终端
screen -R 74165.cxb -X quit
#注:如果在Attached状态下,使用screen -d *****(id),先退出