python django 学习
一、 创建项目
基本流程走通02(创建项目、目录层级)
- 直接在windows文件夹下创建项目(不要有中文),打开cmd终端cd到刚才创建目录底下。
diango-admin startproject project(project name)
输入命令创建项目。
tree . /F
看到目录层级
manage.py 一个命令行工具,可以使用多种方式对django项目进行交互。
project
_init_.py 控件,告诉python这个目录应该被看作一个Python包
settings.py 配置文件(修改)
urls.py url声明(修改)
wsgi.py 项目与WSGI兼容的web服务器入口
二、 基本操作(配置数据库、创建应用、激活应用)
基本流程走通03(配置数据库)
1.设计数据库表:
界面显示班级,学生信息(存在数据库,要设计表结构)
2. 班级表结构(表名 :grade 字段:班级名称,成立时间,女生总数,男士总数,是否删除)
学生表结构(表名:students 字段:姓名,性别,年龄,简介,所属班级,是否删除)
3. 启动数据库过程:C盘-》windows-》system32-》cmd(管理员身份运行)
netstart mysql157 启动mysql服务
3.配置数据库
django默认使用sqlLite数据库(settings.py -》DATABASES),使用mysql,在settings.py文件中,通过DATABASES选项进行数据库配置,python3.x安装的是PyMySql,
1.在__init__.py文件中写入两行代码:
import pymysql
pymysql.install_as_MySQLdb()
2.配置数据库,在settings.py
DATABASES = {
'default':{
'ENGINE' :'django.db.backends.mysql',
'NAME' : 'sunck',
'USER': 'root'
'PASSWORD':'sunck',
'HOST' : 'localhost',
'PORT' : '3306',
}
}
换为mysql
NAME = "数据库名字sunck" 没有数据库应该先建一个数据库
mysql -u root -p
show databases;
use "sunck数据库名"
drop databases "数据库名sunck"
create database "数据库名sunck"
3.创建应用(可以创建多个应用,每个应用处理一种业务)//基本流程走通04
创建应用:打开黑屏终端,进入01-sunck下的project
cd project -> 执行 python manage.py startapp myapp'名称'回车,多了一个myapp文件夹,
myapp 目录:
admin.py 站点配置
models.py 模型
views.py 视图
激活应用:(django 1.8.2中文文档)将应用配置带项目,在settings.py文件中,将myapp应用加入到INSTAL_LED_APPS选项中,直接写'myapp'。
三、 模型
基本流程走通04(定义模型、)
- 定义模型
概述:有一个数据表就对应一个模型,以上我们有两个数据表,应该定义两个模型,模型用于与数据库交互,在myapp文件夹下的models.py中定义模型。
from django.db import models 引入包,模型类要继承models.Model类,
类属性对应表字段,创建模型类:
class Grades(models.Model):
gname = models.CharField(max_length = 20)
gdata = models.DateTimeField()
ggrilnum = models.IntegerField()
gboynum = models.IntegerField()
gisDelete = model3.BooleanFiled(default = False)
def _str_(self):
return “%s-%d-%d-%d”%(self.gname,self.gdata ,self.ggrilnum ,self.gboynum) #显示,需要重启shell quit()-->python manage.py shell->导库->Grades.objects.all()会打印数据
def _str_(self):
return self.gname #返回班级名
基本流程走通05(迁移文件、操作数据)
class Students(models.Model):
sname = models.CharField(max_length = 20)
sgender = models.BooleanFiled(default = True)
sage = models.IntegerField()
scontent = models.CharField(max_length = 20)
sisDelete = models.BooleanFiled(default = False)
#关联外键,不需要定义主键,在生成时自动添加,并且自动增加
sgrade = models.ForeignKey("Grades") //模型已经定义完成
- 在数据库中生成数据表
1)生成迁移文件
project文件夹下,python manage.py makemigrations
生成迁移文件,生成migrations目录,-》多了一个id就是主键,show tables;
执行迁移文件,没有表生成。
2)执行迁移 :执行python manage.py migrate
,OK成功,此时数据库多了很多表包括哟自己创建的两个表。相当于执行sql语句去创建sql表,表名添加项目名。通过模型对象操作数据。
select * from myapp_grades表名
desc myapp_grades #查看具体信息
- 操作数据
进入到python shell 环境执行python manage.py shell
;
引入一些包:
from myApp.models import Grades,Students
from django.utils import timezone
from datetime import *
基本流程走通06(数据增删改查)
#可以在shell黑屏底下直接写
查询所有数据:Grades.objects.all()
#object为隐藏属性,all方法可以看到Grades里面所有的数据。
添加数据:本质是创建一个模型类的对象实例。创建对象,
#插入
gradel = Grades()
gradel .gname = "python04"
gradel .gdate = datatime(year = 2017,month = 7,day = 17)
gradel .ggirlsnum = 3
gradel .gboynum= 70
gradel .save() //保存到数据库
select * from myapp_grades表名 查看现在已经有了数据
#查看
grade2 会有数据 #查看具体某个对象
Grades.object.get(pk = 2) #查看id =2的对象信息
g = Grades.object.get(pk = 2) #查看id =2的对象信息
g
#修改
grade2.gboynum = 60 #目前只是模型修改,数据库里面不会修改
grade2.save() #数据库里面更新
#删除
grade2.delete() #删除 物理删除,数据库里面也没有数据,模型对象.delete
基本流程走通07(服务器、admin)
- 关联对象
stu = Students()
stu.sname = "学1"
stu.sgender = False
stu.sage = 20
stu.scontend = "我叫学1"
stu.sgrade = grade1
stu.save()
select * from myapp_students; #sgrade_id = 1 外键
#获得关联对象的集合,获取python04班级的所有学生
grade1(类名).students(关联对象名)_set.all()
#创建曾志伟,直接属于grade1班
stu3 = grade1.students_set.creat(sname = u'曾志伟',sgender = True,scontend = u'我叫曾志伟') 不用sava,直接存到数据库
-
启动服务器
格式:python manage.py runserver ip:port
,ip可以不写代表本机ip,端口号默认8000。python manage.py runserver ,这是一个python写的轻量级服务器,仅在测试开发中使用。cd project 目录 -> 启动服务器:python manage.py runserver
-> net start mysql157
127.0.0.1:8000 it worked!!! 服务以及运行 -
adminz站点管理
内容发布:添加,修改,删除内容(可视化管理)
公告访问:
1)配置admin应用:在settings.py
文件中添加
INSTALLED_APPS = [
'django. contrib.admin'
] #默认是已经添加好的,
#管理一般有账号与密码,所以要创建管理员和密码
cd project 目录
python manage.py createsuperuser
创建好了依次输入用户名,邮箱,密码
#汉化
网址 :127.0.0.1:8000/admin 直接访问
汉化:修改settings.py -》 LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'不用重启,直接刷新
#管理数据表
基本流程走通08(admin显示控制、属性说明)
管理数据表;主要修改admin.py
文件
from .models import Grades,Student
#注册
admin.site.register(Students)
admin.site.register(Grades) #刷新界面,管理页面不友好
#自定义管理页面
admin.site.register(Grades)
class GradesAdmin (admin.ModelAdmin): #列表页属性
#显示字段,可以点击,添加几个显示几个字段
list_display =['pk','ganme','gdata','ggirlnum','gboynum','gisDelete']
#过滤器过滤字段,显示想要的内容
list_filter = ['ganme']
#添加了查找框,搜索字段
searc _fields =['ganme'] #分页字段 ,每五条是一页
list_per_page = 5 []
#添加、修改页属性 添加页 | 点击pk进入修改页
#属性的先后顺序 gname gdata
fields = ['ggirlnum','gboynum','ganme','gdata','gisDelete'] #没有'pk'
#给属性分组 fields |fieldsets 不能同时使用
fieldsets = [
("num",{"fields":['ggirlnum','gboynum']}),
("base",{"fields":['ganme','gdata','gisDelete']}),
]
学生的 web添加学信息,可以直接添加到数据库中
#自定义管理页面
class StudentsAdmin (admin.ModelAdmin): #列表页属性
list_display =['pk','sanme','sage','sgender','scontend','sgrade']
list_filter = ['ganme']
searc _fields =['ganme']
list_per_page = 5 []
#添加、修改页属性 添加页 | 点击pk进入修改页
#属性的先后顺序 gname gdata
fields = ['ggirlnum','gboynum','ganme','gdata','gisDelete'] #没有'pk'
#给属性分组 fields |fieldsets 不能同时使用
fieldsets = [
("num",{"fields":['ggirlnum','gboynum']}),
("base",{"fields":['ganme','gdata','gisDelete']}),
]
基本流程走通09(关联对象)
需求:在后台管理界面创建一个班级时,可以直接添加几个学生。
class StudentsInfo(admin.StackInline):
class StudentsInfo(admin.TabularInLine):
model = Students
extra = 2 #一个班级连个学生
class GradeAdmin(admin.ModleAdmin):
inlines = [StudentsInfo] #加两行学生项添加的列表
bool值显示男女,不显示对错符号:
class StudentsAdmin (admin.ModelAdmin):
def gender (self):
if self.sgender = true:
return "男"
else:
return "女"
gender.short_description = "性别" #设置页面列的名称,
list_display =['pk','sanme','sage',gender,'scontend','sgrade']
执行动作位置问题:
#执行动作所放位置
actions_on_bottom = true #上下都有
actions_on_top = False #上下都有
以后使用装饰器注册:类换是要有,但是上面为
@admin.register(Students)
替换
admin.site.register(Grades) #刷新界面,管理页面不友好
基本流程走通10(视图概述)
视图的基本使用:
- 概述:视图对web请求进行回应,视图就是一个python函数,在
view.py
文件中定义视图
#定义视图(定义函数)
-----------------view.py ------------------------------------
from django.http import HttpResponse
def index(request ):
return HttpResopnse ("sunck is a good man") #先传一个数据
-----------------project.urls.py-------------------------------
#配置URL 1.修改project-》urls.py文件
urlpatterns = [
url(r' ^admin/',admin.site.urls), #一个url绑定一个试图
url(r'^',include('myapp.urls')) #1270.0.0 后面什么也不显示,r代表什么都匹配,
]
#2.需要在应用底下,即myapp底下创建urls.py
-----------------myapp.urls.py-------------------------------
```python
myapp.urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.index),
url()
]
1.匹配顺序#配置URL 1.修改project-》urls.py文件
urlpatterns = [
url(r' ^admin/',admin.site.urls), #一个url绑定一个试图
url(r'^',include('myapp.urls'))
3.def detail(request ,num):
return HttpResopnse ("detail -%s"%num)
2.myapp.urls.py
urlpatterns = [
url(r'^$',views.index),
url(r' ^(\d+)/(\d+)$',views.detail)
]
输入127.0.0.1:8000/1000/
输出 detail -1000
模板的基本使用:模板是html页面,可以根据视图中传递过来的数据,进行填充。
1.#创建模板目录:创建一个和myapp,project同级的目录templates,可以在templates下创建一个myapp,存放对应myapp的模板。