一:项目平台下载组件版本说明:
1:pycharm是pycharm community 2018.2
2:mysql是mysql-server 5.7
3:Django是django2.1.3
4:python是python3.6.7
5:ubuntu-18.10-desktop-amd64
二:安装及问题说明
1: 在win10中安装虚拟环境,下载安装VMware Workstation Pro,下载:ubuntu-18.10-desktop-amd64,并在创建ubantu。
2:在ubantu中用火狐下载pycharm community 2018.2,并在黑屏终端输入$:sudo tar zxvf pycharm.tar解压文件。
3:下载安装并更新默认python2为python3
sudo apt-get install python3(提醒安装pip3)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 200
update-alternatives --config python
4:Django安装
pip install django==2.1.3
在黑屏终端$:python3
import django
print(django.get_version())
测试是否安装成功
5:mysql-server 5.7
sudo apt-get install mysql-server
service mysql start # 启动mysql
service mysql stop # 关闭mysql
修改mysql的登陆密码:
先查看debian.cnf中的debian-sys-maint密码登陆mysql
用命令:update user set authentication_string=password(‘123’) where user=‘debian-sys-maint’ and host=‘localhost’ \g
然后刷新权限:flush privileges \g
vim /etc/debian.cnf
debian-sys-maint的密码.
1)、登录之后查询plugin字段值:
mysql> select plugin from user where user = ‘root’ \g;
执行结果plugin字段为空。
2)、更新plugin字段为mysql默认值:
mysql> update user set plugin=‘mysql_native_password’ \g;
查询更新结果:
3)、更新成功,继续执行更新密码操作:
mysql> update user set authentication_string=password(‘123456’) where user=‘root’ and host=‘localhost’ \g;
4)、刷新权限:
mysql> flush privileges \g;
三:项目搭建
1 创建项目->在黑屏终端输入代码创建项目:django-admin startproject mysite
2 设计表结构
班级表结构(表名:grade)
字段:班级gname
成立时间gdate
女生总数ggirlnum
男生总数 gboynum
是否删除 isDelete
学生表结构(表名:studuents)
字段:学生姓名sname
学生性别sgender
学生年龄sage
学生简介scontend
所属班级sgrade
是否删除isDelete
3 配置数据库
打开pycharm打开刚才创建的项目目录mysite
在setting.py文件中,通过DATABases选项进行数据库配置
配置mysql:python3中安装pymysql
在_init_.py文件中写入两行代码
Import pymysql
pymysql.install_as_MySQLdb()
在黑屏中创建数据库mycxy
在setting文件DATABASES中写入
‘default’:{
‘ENGINE’:‘django.db.backends.mysql’,
‘NAME’:数据库名,
‘USER’:用户名,
‘PASSWORD’:数据库密码,
‘HOST’:数据库服务器ip,
‘PORT’:端口,
}
4 创建应用(在一个项目中可以创建多个应用,每个应用进行一种业务处理)
打开黑屏终端输入项目mysite目录
执行:python3 manage.py startapp myApp
Myapp目录下的文件说明
Admin.py 站点配置
Models.py 模型
Views.py 视图
配置应用settings.py文件中的,将myapp应用加入到installed_apps
5 定义模型(有一个数据表,就对应一个模型)
Mysql>create database Django_admin character set utf8;
在models.py文件中定义模型
引入from Django.db import models(模型类要继承models.Model类)
Class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum =models.IntegerField()
gboynum =models.IntegerFiedl()
isDelete = models.BooleanField(default=False)
def str(self):
return self.gname
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’,on_delete=models.CASCADE)
def str(self):
return self.sname
说明:不需要定义主键,在生成时自动添加,并且值为自动增加
6 在数据库生成数据表
生成迁移文件
打开黑屏终端在mysite目录下输入:python3 manage.py makemigrations
执行后再mysite目录下生成一个迁移文件,此时数据库中还没有生成数据表
执行迁移
Python3 manage.py migrate
7 测试数据操作
在黑屏终端 进入到(python shell):python3 manage.py shell
1)引入包:
from myApp.models import Grades,Students
from django.utils import timezone
from datetime import *
2)查询所有数据 类名.objects.all()
Grades.objects.all()
3) 添加数据(本质:创建一个模型类的对象实例)
grade1 =Grades()
grade1.gname = “python04”
grade1.gdate = datetime(year=2017,month=7,day=17)
grade1.ggirlnum =3
grade1.gboynum = 70
grade1.save()
4)查看某个对象: 类名.objects.get(pk=2)
Grades.objects.get(pk=2)
5)修改数据 :模型对象.属性 =新值
grade2.gboynum =60
grade2.save()
6)删除数据:模型对象.delete()
grades.delete() 注意:物理删除,数据库中的表里的数据被删除了
7)关联对象
对象名.关联的类名小写_set.all()
grade1.students_set.all()
创建学生:stu =Students()
stu.sname =”薛艳梅”
stu.sgender= False
stu.sage =20
stu.scontend=”我叫薛艳梅“
stu.sgrade = grade1
stu.save()
用这样的方式直接创建一条学生记录:
stu3 =grade1.students_set.create(sname=u’刘德华’,sgender=True,scontend=u’我是刘德华’,sage=45)
8 启动服务器
python3 manage.py runserver ip:port
ip 可以不写,不写的话代表本机ip
端口号默认是8000
这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用这个
四:Admin站点管理
公告访问
内容发布:负责添加、修改、删除内容
1配置admin应用:在settings.py文件中的INSTALLED_APPS中添加’django.contrilb.admin’默认已经添加好
2 创建管理员用户
python3 manage.py createsuperuser
依次输入用户名、邮箱、密码
3 汉化
修改settings.py中的LANGUAGE_CODE =”zh-hans”
TIME_ZONE=’Asin/Shanghai’
4 管理数据表
1)修改admin.py文件
from.models import Grades,Students
# 注册
admin.site.register(Grades)
admin.site.register(Students)
2)自定义管理页面
class GradesAdmin(admin.ModelAdmin):
# 列表也属性
# list_display =[’gname’,’gdate’,’ggirlnum’] 显示字段
# list_filter = [‘gname’] 过滤器
# search_fields =[‘gname’] 按gname搜索字段
# list_per_page = 5 分页属性
5 添加、修改页属性
# 添加、修改页属性
# fields = [] 规定属性先后顺序
# fieldsets = [] 给属性分组,fields与fieldsets不能同时使用
3)admin.site.register(Grades,GradesAdmin) 注意一定要把自定义新的类加到后
Admin.site.register(Students)
4)关联对象(需求:在创建班级时可以直接添加几个学生)
在admin.py文件中添加类
class StudentsInfo(admin.TabularInline):
model = Students
extra = 2
同时把刚创建的类StudentsInfo写到创建班级类中做关联,
class Gradesadmin(admin.ModelAdmin):
inlines = [Studentsinfo]
5)修改布尔值显示问题(显示男女)
在创建学生类中添加函数,同时在list_display中修改“sgender”改为gender
def gender(self):
if self.sgender:
return “男”
else:
return “女”
gender.short_description =’性别’修改页面的列的名称
6)执行动作的位置
action_on_bottom = True
action_on_top =False
7)数据库字段编码错误问题:
在mysql>alter table myApp_grades convert to character set utf8;
解决中文输入报错问题。
6使用装饰器注册,在类的前使用@admin.register()替换类admin.site.register(Students,StudentsAdmin)
@admin.register(Students)
替换admin.site.register(Students,StudentsAdmin)
五 视图的基本使用
-
在django中,视图对web请求进行回应
视图就是一个python函数,在view.py中定义
from django.http import HttpResponse
def index(request):
return HttpResponse(“cxy is a good man”) -
配置url
修改project目录下的urls.py文件
from django.contrib import admin
from django.urls import path,include
在urlpatterns中增加path(’’,include(‘myApp.urls’))
在myApp应用目录下创建一个urls.py文件
from django.conf.urls import url
from . import views
urlpatterns =[
url(r’^$’,views.index)
]
注意:在python3中使用django2的时候,在设置urls的时候,会遇到一些坑。这里做一下记录。
1,系统的urls.py里,这里在1.X的时候,都是采用的url方式。如下
url(r’^’, include(“test1.urls”)),1
在2.0中,它推荐使用的是path模块,所以这里就改写一下。引包from django.urls import path
path(’’, include(“test1.urls”)),
再myApp目录下的view.py修改
from django.http import HttpResponse
def index(request):
return HttpResponse(“cxy is a good man”)
六 模板的基本使用
模板是html页面,可以根据视图中传递过来的数据进行填充
创建模板,位置:在mysite目录下创建templates目录再创建myApp目录
配置模板路径:修改settings.py文件下的TEMPLATES
修改‘DIRS’:[]为’DIRS’:[os.path.join(BASE_DIR),’templates’]
在目录templates/myApp下定义两个grades.html和students.html模板
模板语法:
一种:{{输出值,可以是变量,一个可以是对象属性}}
一种:{%执行代码%}
http://127.0.0.1:8000/grades
写grades.html模板,在body中写
班级信息列表
{%for grade in grades%}
{{grade.gname}}
{%endfor%}
定义视图:在myApp目录下的views.py中定义视图
from .models import Grades
def Grades(request):
gradesList = Grades.objects.all()
return render(request,’myApp/grades.html’,{”grades”:gradesList})
配置 Urls控制器:
在myApp目录下的urls.py文件的urlpatterns里写
url(r’^grades/$’,views.grades)
http://127.0.0.1:8000/students
写模板:在目录templates/myApp/下写students.html模板文件