Ubuntu系统下Django框架的环境搭建
此文章针对于新手,和第一次的搭建。
Django是什么,是一个开放源代码的Web应用框架,由Python写成。
首先你得了解数据库的简单操作(增删改查)以及Python的基础,
至于不懂呢,也没关系啊,接着往下看就好了
(这里我选择的是django1.11.8版本,mysql数据库以及PyCharm软件)
此文章并不是Django的教程,也不会教你使用django的详细操作,
仅仅只是最基本的环境的搭建而已。
基础差一点的会碰到很多问题,例如数据库编码的问题,或者django的报错信息。
我会把我搭建环境时,碰到的问题,在过程中会讲解,其他没碰到的问题,那我也
就没法指出了。
那么就开始吧!
一、第一步,安装Django框架,MySQL数据库,以及问题解决
(1)因为我的ubuntu版本是18.04.15.0-20-generic
有两个版本的Python,2.7和3.5,默认是python2.7,所以安装时记得带上3
(3)终端下输入:sudo apt-get install python3-django
或者:pip3 install django=1.11.8 (pip3代表的是Python3版本,pip就是2)
(4)数据库安装:sudo apt-get install mysql 直接下载最新版即可
(5)或者 sudo apt-get install mysql=version 下载指定版本
二、第二步,创建MySQL数据库,以及问题解决
(1)输入mysql -u root -p ,然后输入密码就进入数据库。
(2)输入create database 数据库名 character set utf8 ;创建数据库并指定编码。
注意:如果你不指定编码,那么你的数据库存汉字的时候,会报错,或者乱码
特别是新创建的数据库,在学习django的时候跟数据库打交道时必不可少的,
那么就会出现很多问题,最头痛的就是编码问题,如果想一劳永逸,就点击这里
问题解决:
1,这里,第一次安装的数据库的密码是你安装时输入的,如果安装没有提示输入密码,root默认的密码就是空,如果输入了空密码也进不去,那么请看Ubuntu下安装MySQL后密码忘记解决方案,
2,有一种情况,如果你mysql -u root -p输入密码后出现:
ERROR 1698 (28000): Access denied for user 'root'@'localhost' 密码明明是对的,却还是进不去数据库。
但是你在前面加上个sudo就能进去了,这就是没有权限的原因,后面django的时候
就需要远程到mysql,如果不解决就会报错,我的解决方法就是重新创建一个数据库
create user '用户名'@'localhost' identified by'密码';,如果出现其他问题,请自行百度吧。
三、第三步,生成django文件
(1)在你所要工作的空目录下输入(我的工作目录叫webframe):
django-admin startproject project 这里我们的项目名称叫做 project
这一步,我就报错了找不到django-admin这条命令。解决:解决找不到django-admin这条命令解决方案
(2)打开Pycharm软件,选择好你的工作目录webframe
,并点击创建。注意你Python3版本的路径。否则会出问题的,
我的路径是:/var/bin/python3.x
四、第四步,连接MySQL数据库
(1)打开project/project/settings.py,修改DATABASE为:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #MySQL数据库 'NAME': 'login', #数据库名称 'USER': 'root', #数据库用户 'PASSWORD': '123456', #数据库密码 'HOST': 'localhost', #代表本机也可以127.0.0.1 'PORT': '3306' #默认端口号3306 } }
注意:如果你的数据库账号信息填写错误,或者,没有权限访问
在后面对数据库进行操作时,会报错的
(2)打开project/project/__init__.py文件,添加内容:
import pymysql
pymysql.isntall_as_MySQLdb()
(3)在project/创建应用myApp文件
python3 manage.py startapp myApp 这里应用文件名就叫myApp。
(4)在project/project/settings.py下激活应用
将myApp添加到INSTALLED_APPS的最后一条
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myApp' ]
五、第五步,定义模型project/myApp/models.py下操作(和数据库交互)
class Grades(models.Model): gname = models.CharField(max_length=20) #最大长度为20字节 gdate = models.DateTimeField() #时间类型 ggirlnum = models.IntegerField() #整数类型 gboynum = models.IntegerField() #整数类型 isDelete = models.BooleanField(default=False)#布尔值,Ture,False,默认False class Students(models.Model): sname = models.CharField(max_length=20) sgender = models.BooleanField(default=True) sage = models.IntegerField() scontend = models.CharField(max_length=20) isDelete = models.BooleanField(default=False) sgrade = models.ForeignKey('Grades') #关联外键
详细参数及选项查看django的models选项及参数
六、第六步
1,在数据库中生成数据表
(1)生成迁移文件,在project下输入:
python3 manage.py makemigrations
(2)执行迁移,
python3 manage.py migrate
2,数据库模式下查看数据表,表单
use 数据库名 #对数据库进行操作 show tables; #查看数据库里的内容 desc myApp_grades #查看表单(实际名按照tables里的名字) desc myApp_students #查看表单实际名按照tables里的名字)
七、第七步,做数据测试
1.进入交互式环境终端project/下输入 python3 manage.py shell 2.导入一些模块 from myApp.models import Grades,Students from django.utils import timezone from datetime import * 3.在模型里操作的一些功能命令 数据库下操作命令:(所有命令只是在当前搭建的环境生效) use sunck #进入sunck数据库 select * from myApp_students; #查看班级信息 select * from myApp_grades; #查看学生信息 在模型里操作命令: 增: grade = Grades() #创建一个班级空类 grade.gname = '网44班' #创建一个班叫网44班 grade.gdate = datetime(year=2018,month=4,day=30)#班级创建的时间 grade.ggirlnum = 1 #班级女生数量 grade.gboynum = 29 #班级男生数量 grade.save() #保存到数据库,如果不save将没有储存 student = Students() #创建一个学生空类 student.sname = '赵铁柱' #创建一个学生叫赵铁柱 student.sgender = 1 #0女,1男,默认男,所以可以不写 student.sage = 18 #赵铁柱的年龄 student.scontend = '我叫赵铁柱' #赵铁柱的简介 student.sgrade = grade #赵铁柱在网44班 student.save() #保存到数据库 删: grade.delete() #这条数据直接被删除(物理删除) 改: grade.gname = '网11班' #直接换成新值就能修改 grade.ggirlnum = 15 #直接换成新值就能修改 查: Grades.objects.all() #查看Grades表里的所有数据 Grades.objects.get(id=1) #查看id为1的数据 grade.students_set.all() #查看班级下的所有学生
注意:如果你没有做之前对数据库做配置的操作,你这里save的时候肯定会出编码问题的报错的,再或者是你在shell里粗心,xx.gname = 'xx'写错了,这里的grade.gname等等都是你在定义模型时定义的东西。
八、第八步,启动服务,终端下操作
启动服务器,在project下操作(注意:数据库必须启动)
python3 manage.py runserver ip:port #IP如果不写,默认本机ip,默认8000端口
注意:这个只是一个轻量级的服务
打开浏览器输入127.0.0.1:8000,如果出现
正常工作了! 祝贺你的第一个由Django驱动的页面。 接下来运行你的第一个程序 python manage.py startapp [app_label]. 您看到此消息是由于Django的配置文件设置了 DEBUG = True,您还没有配置任何路由URL。开始工作吧。
*汉化,china时间,在setting.py做下面,做修改
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
那么就表示你的环境搭建没有问题。
九、第九步,启动站点管理
(1)在setting.py里的INSTALLED-APPSz中添加内容
'django.contrib.admin' #一般都默认添加了
(2)创建站点管理员,在终端上输入:
python3 manage.py createsuperuser #依次输入用户名,邮箱,密码
十、第十步,站点部署,管理数据表
admin.py文件下的所有代码
from django.contrib import admin # Register your models here. from .models import Grades,Students class StudentInfo(admin.TabularInline): model = Students #使用students extra = 3 #设定每创建一个班级时,附带创建3个学生 @admin.register(Grades) #注册 class GradesAdmin(admin.ModelAdmin):#班级 def pk(self): #编号 return self.pk def name(self): return self.gname def girlnum(self): return self.ggirlnum def boynum(self): return self.gboynum def isdelete(self): if self.isDelete: return '是' else: return '否' pk.short_description = '编号' #设置标签,站点上显示的就不是pk,name,等等,而是中文的显示, name.short_description = '姓名' girlnum.short_description = '女生' boynum.short_description = '男生' isdelete.short_description = '毕业' inlines = [StudentInfo] #创建班级是,顺带添加仨学生 #列表页属性 list_display = [pk,name,girlnum,boynum,isdelete]#显示字段,分好类方便查看,注意加了标签就不能排序了 list_filter = ['gname'] #过滤器,数据量比较多,以条件来过滤数据 search_fields = ['gname']#搜索器,以条件来搜索数据 list_per_page = 10 #分页,设置x条数据为一页 #添加,修改页属性 #fields = ['gname','gboynum','ggirlnum','gdate','isDelete']#设置添加页顺序 fieldsets = [ ('人数',{'fields':['ggirlnum','gboynum']}), ('班级',{'fields':['gname','gdate','isDelete']}) ] #给属性分组,但是不能与fields同时使用 @admin.register(Students) #注册 class StudentsAdmin(admin.ModelAdmin):#学生 #设置显示的内容(主要拿来汉化) def gender(self): if self.sgender: return "男" else: return "女" def pk(self): return self.pk def name(self): return self.sname def age(self): return self.sage def contend(self): return self.scontend def grade(self): return self.sgrade def isdelete(self): if self.isDelete: return '是' else: return '否' #设置页面列的名称 gender.short_description = '性别' pk.short_description = '编号' name.short_description = '名字' age.short_description = '年龄' contend.short_description = '简介' grade.short_description = '班级' isdelete.short_description = '毕业' list_display = [pk,name,gender,age,contend,grade,isdelete] list_per_page = 10 search_fields = ['sname'] list_filter = ['sgrade']
十一、十一步,登入站点查看信息
打开浏览器,输入127.0.0.1:8000/admin,输入创建的管理员账号密码登入,
所有数据的操作都可以在此,是不是很方便呢,
十二、创建模板,
(1) 创建模板,树状为project/templates/myApp
在project下创建templates,在templates下创建myApp
(2) 配置模板路径
在setting.py的TEMPLATES里写入'DIRS': [os.path.join(BASE_DIR,'templates')],
十三、创建静态文件夹
如果不做这一步,那么你所设置的css,js,img都不会被使用
(1)创建css,js,img文件,树状为project/static
在project下创建static再在static/创建css,js,img
(2)在settings.py最后一行添加
HERE = os.path.dirname(os.path.abspath(__file__))
HERE = os.path.join(HERE, '../')
STATICFILES_DIRS = (
os.path.join(HERE, 'static/'),
)
django环境搭建的后续操作(小扩展)
第1步:
*在settings.py文件下添加,即可局域网访问
ALLOWED_HOSTS = ['*',]
第2步:
*创建模板文件
在templates/myApp/创建xxx.html即可
第3步:
*定义视图,views.py里创建视图,代码如下:
from django.http import HttpResponse
def index(request):
return HttpResponse("欢迎来到某某网")
第4步:
*配置url,在project/urls.py加入:
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('myApp.urls'))
]
*在myApp下创建urls.py,并写入:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index)
在浏览器上输入127.0.0.1:8000即可看到欢迎来到某某网。
好了,简单的django的环境搭建完成了,介于我也只是个小菜鸟,有错误的地方请指出来。