提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:最近在学习Django,搭建一个简单的“HelloWord”网页,搭建过程中遇到了很多问题,记忆力不好,所以写一个博客归纳总结一下,问题主要包括Django项目的创建、部署、配置MySQL数据库等问题以及相关Django、mysql的命令行操作指令汇总,方便知识点复盘。如果你也是Django新手入门,希望你能从本篇文章有所收获。
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目搭建
前期准备
1、python3.7
2、专业版Pycharm IDE
3、安装Django模块
4、安装MySQL数据库服务
说明一下,社区版本的pycharm适合纯python开发,用于教学,而专业版更适合用于企业项目开发,专业版,功能丰富,例如:Web开发,Python Web框架,Python的探查,远程开发能力,数据库和SQL支持,对开发者来说十分棒,十分专业的开发工具。另外,为什么要配置MySQL数据库呢?因为Django 中使用默认的 SQLite3 数据库的话(反正我觉得非常不好用)可以进行改写,而且在实际生产环境,Django是不可能使用SQLite这种轻量级的基于文件的数据库作为生产数据库。一般较多的会选择MySQL。
我们打开pycharm新建一个Django工程(也可以直接在terminal下用指令django-admin startproject xxx创建)
目前,我使用Pycharm创建项目的App时候会报错!问题目前还没有解决,但是可以使用命令行 python manage.py startapp App名称 创建App文件夹。
错误如下:
建好后会自动生成一个目录框架。那么来了解下这个框架里文件的作用。
命令行创建项目和app
#创建demo1的项目
D:\django>django-admin startproject demo1
D:\django>cd demo1
#创建app1的APP
D:\django\demo1>python manage.py startapp app1
cd app1
#创建templates(模板目录)和static(静态文件目录)
mkdir templates
mkdir static
cd static
#创建css、js、images、files、plugins分别用来存放css样式文件、JavaScript文件、图片文件、文本文件、插件
mkdir css
mkdir js
mkdir images
mkdir files
mkdir plugins
Django项目配置文件说明
二级子目录 BookStore 下的文件称为 Django 项目的配置文件, 它们在创建项目的时候自动生成。下面我们对上述涉及到的文件进行详细的说明:
1) manage.py文件
一级子目录中的 manage.py 文件是管理 Django 项目的重要命令行工具,它主要用于启动项目、创建应用和完成数据库的迁移等。
2) init.py文件
二级子目录中的 init.py 文件用于标识当前所在的目录是一个 Python 包,如果在此文件中,通过 import 导入其他方法或者包会被 Django 自动识别。
3) settings.py文件
settings.py 文件是 Django 项目的重要配置文件。项目启动时,settings.py 配置文件会被自动调用,而它定义的一些全局为 Django 运行提供参数,在此配置文件中也可以自定义一些变量,用于全局作用域的数据传递。
4) urls.py文件
url.py 文件用于记录 Django 项目的 URL 映射关系,它属于项目的基础路由配置文件,路由系统就是在这个文件中完成相应配置的,项目中的动态路径必须先经过该文件匹配,才能实现 Web 站点上资源的访问功能。
5) wsgi.py文件
wsgi.py 是 WSGI(Web Server Gateway Interface)服务器程序的入口文件,主要用于启动应用程序。它遵守 WSGI 协议并负责网络通讯部分的实现,只有在项目部署的时候才会用到它。
配置app_01和mysql数据库
untitled/untitled/settings.py文件中修改:
在 settings.py 文件 INSTALLD_APPS 列表中注册app
INSTALLED_APPS=[
‘应用命名’.apps.应用名称Config
或者
‘应用名称’(不推荐使用)。
]
#对app1进行注册
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1', #启用app1 不推荐使用
]
#数据库修改,修改为自己的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', #数据库名
'USER': 'root', #数据库用户名
'PASSWORD': '', #数据库密码
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
在修改settings.py同级的__init__.py文件:
#告诉Django用pymysql来连接数据库
import pymysql
pymysql.install_as_MySQLdb()
注意:把sqlite3数据库修改为mysql数据库一定到在setting.py目录下的initial.py文件下添加如上代码
使用数据库
demo1/app_01/models.py文件中:
#一个类代表这一个表
class test(models.Model):
#在表中添加name字段
name = models.CharField(max_length = 20)
在cmd或者终端中输入命令:
# 让 Django 知道我们在我们的模型有一些变更
#生成迁移,生成sql脚本
python manage.py makemigrations
# 创建表结构
#执行迁移,根据迁移文件创建表
python manage.py migrate
#创建表示会加上app的名称,如果表里没用主键Django会自动创建id的主键
##可以增加的操作 创建超级管理员
在命令行窗口输入:python manage.py createsuperuser
注意:在创建超级管理员之前,你还得现在数据库创建一下基本的表,否则超级管理员也无法创建,需要运行: python manage.py migrate
编写业务逻辑
新建成功工程后views.py文件里是空的,需要自己编写业务逻辑
from django.shortcuts import HttpResponse # 导入HttpResponse模块
def hello(request): # request是必须带的实例。类似class下方法必须带self一样
return HttpResponse("Hello Django!!") # 通过HttpResponse模块直接返回字符串到前端页面
配置url主路由
from django.contrib import admin
from django.urls import path
from app_01 import views
urlpatterns = [
path('',views.hello,name='hello'),
path('admin/',admin.site.urls),
]
运行server并访问
terminal下执行 python manage.py runserver 这样执行默认的路径是127.0.0.1:8080
指定端口或地址就再后面写上,如:python manage.py runserver 127.0.0.1:8888
然后浏览器访问http://127.0.0.1:8888
app内部的独立文件
主路由与子路由
1.子路由(独立路由)
独立路由(子路由):将每个应用中的路由系统写自己的app应用的urls.py 文件中(需要自己创建)。
之前我们将所有的路由都放到了主urls当中,django支持我们在每个app应用中编写自己的子路由(url)
(1)、编写自己的子路由
(2)主路由包含子路由
首先导入from django.urls import include
使用 path(‘一般是应用名称’ ,include(‘应用名称.urls’))
主路由中一般放共用的路由系统。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/',include('app01.urls')),
]
(3)访问路径时,主路径+子路径
困扰我的MySQL数据库的配置问题
由于Django中是默认使用SQLite数据库的,在settings.py文件中的默认配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
但是,我需要配置数据库为mysql,该怎么办呢?
创建mysql数据库
1、检查本机是否安装Mysql
ctrl+r 快捷键打开cmd
输入 services.msc
查看服务列表中有无mysql服务
如果有服务,那就代表已经安装了。如果没安装,请参考安装mysql链接:
https://www.cnblogs.com/zhangkanghui/p/9613844.html
安装MySQL服务
安装包地址:https://dev.mysql.com/downloads/mysql/
下载完成后,选择一个磁盘内放置并解压。
2020年2月14日,mysql官网进不去了,好吧那就来个镜像,总没问题了,如果官网龟速下载,建议使用下面的镜像巨快
Mysql国内镜像:http://mirrors.sohu.com/mysql/MySQL-8.0/
安装教程
1. 配置环境变量
变量名:MYSQL_HOME
变量值:E:\mysql-5.7.20-winx64
2. 生成data文件
以管理员身份运行cmd
进入E:\python\mysql\mysql-8.0.12-winx64\bin>下
执行命令:mysqld --initialize-insecure --user=mysql 在E:\python\mysql\mysql-8.0.12-winx64\bin目录下生成data目录
3. 安装MySQL
继续执行命令:mysqld -install
4. 启动服务
继续执行命令:net start MySQL
5. 登录MySQL
登录mysql:(因为之前没设置密码,所以密码为空,不用输入密码,直接回车即可)
E:\python\mysql\mysql-8.0.12-winx64\bin>mysql -u root -p
6. 查询用户密码
查询用户密码命令:mysql> select host,user,authentication_string from mysql.user;
7. 设置(或修改)root用户密码
mysql> use mysql
提别注意:下面这个修改密码的方式不正确,可能是因为版本问题。最近解决了。
mysql> update mysql.user set authentication_string=(“123456”) where user=“root”;
解决方案如下:
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> flush privileges;
#作用:相当于保存,执行此命令后,设置才生效,若不执行,还是之前的密码不变
8. 退出
mysql> quit
Bye
9. 再次登录
解决问题!!!
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
关于修改密码再次登录出现ERROR的解决方案:
首先问题出现的原因在于可能是因为版本不同,命令有所差异。个人认为,其实无所谓了,最终问题解决了就是了。
如果你是按照上面的完整教程安装出现这种问题的解决方案:
1、所有东西都删除,然后重装,按照上面教程再来一遍;部分内容有更正。特别注意!
2、如果你之前装了,报错之后就一直放在那里,现在请严格按照下面步骤进行:
a. 打开cmd,切换到mysql的bin目录下,输入命令 net stop mysql,停止mysql服务;
b. 打开mysql的安装目录,找到data文件夹,将其删除!
c. 回到cmd命令窗口,输入mysqld -remove
d. 接下来按照上面教程,从第二步生成data文件开始执行,一定要注意修改密码那里:
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
然后就可以愉快使用密码登录mysql了。
确保有安装mysql之后,我们就来创建数据库:
1、ctrl+r 快捷键,打开运行窗口,输入cmd,点击确定
2、命令行里输入:
mysql -uroot -p123456
create database proName
mysql -uroot -p123456 创建一个数据库,用户名为root,密码为123456
proName 为表名
另外可以使用 create database 数据库名; 创建数据库。
create database MyDB_one;
3、如果想在命令行里执行 mysql命令(非必须,根据自己需要),则需要配置环境变量
我的电脑–》属性—》高级系统设置–》环境变量–》新建环境变量
变量名:MYSQL_HOME
变量值:E:\soft\after\mysql-8.0.18-winx64\ (此为你mysql的安装路径。可从服务的属性里查看)
配置setting 文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': os.path.join(BASE_DIR, 'db.mysql'),
'NAME': 'proName',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
###这样的方法有一个弊端就是你的数据库和密码都暴露出来了,有很大的安全隐患,所以建议大家用下面的这种方法,提前配置好用户名和密码。
首先,在终端打开配置的文件:sudo vim ~/.bashrc
在文件的末尾加上两行:export DATABASE_PWD = 用户密码
export DB_USER = 用户密码
接着,我们在去settings.py文件中导入一个包:from os import environ
最后,在我们配置数据的位置,配置数据,只是这次可以把用户名和密码用其他方式代替。
至此,就完成了配置
使用pymysql模块连接mysql数据库
python环境默认模块MySQLdb只适用于python2.x,pip装不上。它在python3版本的替代品是pymysql:import pymysql
即 Python3不支持MySQLdb,可用pymysql代替
因此:
将Django默认使用MySQLdb连接数据库 更改为 使用pymysql连接数据库
习惯在与项目同名的文件夹下的 init.py 文件中添加
import pymysql
pymysql.install_as_MySQLdb()
安装命令仅供参考:
pip install mysqlclient
pip install pymysql (如果使用python3.x版本时,用pymysql替换MySQLdb,或者用mysqlclient替换MySQLdb。)
Python3.x版本:Pip install mysqlclient
Python2.x 版本:pip install mysql-python
配置完成,以下步骤为数据迁移
在app下的models.py下写model
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中
体现在django中就是在models.py中,书写类,创建表数据
对应关系如下:
类 —》 表
对象 —》 数据行(记录)
属性 —》 字段
class Author(models.Model):
name = models.CharField(max_length=32) # varchar(32)
pswd = models.CharField(max_length=32) # varchar(32)
参考链接:
https://www.cnblogs.com/maple-shaw/articles/9323320.html
执行数据库迁移的命令
python manage.py makemigrations #为改动创建迁移记录;
python manage.py migrate #将操作同步到数据库。
MySQL创建数据库和创建数据表
MySQL 创建数据库和创建数据表
MySQL 是最常用的数据库,在数据库操作中,基本都是增删改查操作,简称CRUD。
在这之前,需要先安装好 MySQL ,然后创建好数据库、数据表、操作用户。
一、数据库操作语言
数据库在操作时,需要使用专门的数据库操作规则和语法,这个语法就是 SQL(Structured Query Language) 结构化查询语言。
SQL 的主要功能是和数据库建立连接,进行增删改查的操作。SQL是关系型数据库管理系统的标准语言。
SQL 语言的作用:
-
数据定义语言 DDL(Data Definition Language) 。用于创建数据库,数据表。
-
数据操作语言 DML(Data Manipulation Language) 。用于从数据表中插入、修改、删除数据。
-
数据查询语言 DQL(Data Query Language) 。用于从数据表中查询数据。
-
数据控制语言 DCL(Data Control Language) 。用来设置或修改数据库用户或角色的权限。
使用 SQL 操作数据库时,所有的 SQL 语句都以分号结束。(切换数据库时可以不用分号)
在 SQL 语句中,不区分大小写,编写 SQL 语句时可以根据情况用大小写的区别来增加可读性。
二、创建数据库
- 连接 MySQL
输入 mysql -u root -p 命令,回车,然后输入 MySQL 的密码(不要忘记了密码),再回车,就连接上 MySQL 了。
mysql -u root -p
最初,都是使用 root 用户登录,工作中如果一直用 root 用户登录,因为权限太大,风险是很大的,所以等创建好权限适合的用户后,就不要经常登录 root 用户了。
- 查看当前的数据库
使用 show databases; 查看当前安装的 MySQL 中有哪些数据库。
show databases;
刚安装 MySQL 时,默认有四个数据库,information_schema,mysql,perfomance_schema,sys 。通常情况下,我们不会直接使用这四个数据库,但千万不要把这四个数据库删了,否则会带来很多不必要的麻烦。如果不小心删了,建议是重新安装 MySQL ,在重装之前把自己的数据迁移出来备份好,或者从其他服务器上迁移一个相同的数据库过来。
- 创建数据库
使用 create database 数据库名; 创建数据库。
create database MyDB_one;
创建数据库成功后,数据库的数量变成了5个,多了刚才创建的 MyDB_one 。
- 创建数据库时设置字符编码
使用 create database 数据库名 character set utf8; 创建数据库并设置数据库的字符编码。
create database MyDB_two character set utf8;
直接创建的数据库,数据库的编码方式是 MySQL 默认的编码方式 latin1 (单字节编码) ,通常我们会在数据库中存放中文数据,所以最好把数据库的编码方式设置成 utf-8 ,这样中文才能正常显示。
create database MyDB_three charset utf8;
character set 可以缩写成 charset ,效果是一样的。
- 查看和显示数据库的编码方式
使用 show create database 数据库名; 显示数据库的创建信息。
show create database MyDB_one;
show create database MyDB_two;
如果不知道一个数据库的编码方式是什么,可以使用 show create database 数据库名 来查看数据库的编码方式。可以看到刚才创建的 MyDB_one 的编码方式是 MySQL 的默认编码 latin1 ,MyDB_two 的编码方式是 utf-8 。
当然,这种方式不能在创建的同时显示,只能查看一个已经存在的数据库的编码方式。
- 使用 alter database 数据库名 character set utf8; 修改数据库编码
alter database MyDB_one character set utf8;
如果一个数据库的编码方式不符合使用需求,可以进行修改。刚才创建的 MyDB_one 经过修改后,编码方式也变成了 utf-8 。
- 进入或切换数据库
使用 use 数据库名 进入或切换数据库。
use MyDB_one
use MyDB_two;
刚连接上 MySQL 时,没有处于任何一个数据库中,如果要使用某一个数据库,就需要进入到这个数据库中。
use 数据库名 这个命令后面的分号可以省略,这是 SQL 语句中唯一可以省略分号的语句。
- 显示当前数据库 select database();
select database();
创建数据表
- 查看当前数据库中的表
使用 show tables;查看当前数据库中有哪些表。
show tables;
在刚才创建的数据库 MyDB_one 中,还没有创建任何表,所以当前是空的。
- 创建表
使用 create table 表名(字段1 字段类型,字段2 字段类型,字段3 字段类型,…); 来创建一张表。
create table Phone_table(pid INT, name CHAR(20), price INT);
在 MyDB_one 中创建了一个叫 Phone_table 的数据表,这张表有三个字段 pid,name,price 。为了增加 SQL 的可读性,字段名我用的是小写,字段类型用大写。
- 显示表信息
用 show create table 表名; 来显示已创建的表的信息。
show create table Phone_table;
使用 show create table 表名; 可以显示表的字段信息, MySQL 的引擎,和默认的字符编码等信息。与显示数据库信息一样,show 只能显示已经创建了的数据表的信息,不能在创建的同时显示信息。
如果想更好地展示表的字段信息,可以使用 desc 表名; 来显示表的字段信息。
- 给表增加字段
使用 alter table 表名 add 字段名 数据类型; 为已存在的表添加一个新字段。
alter table Phone_table add color CHAR(20);
其他详细的MySQL创建数据库好数据表参考链接:https://blog.csdn.net/weixin_43790276/article/details/102655786
总结
通过以上的资料,可以搭建出一个简单的Django网页,输出“HelloWord”,解决了Django项目的部署流程以及关系型数据库MySQL与Django配置的问题,对Django搭建网页有了基本的认识!