Python_Web
知识内容
创建项目,并了解项目目录结构
选好安置目录项目位置后,打开cmd,输入
`Django-admin`
输入
`Django-admin Startproject myblog`
Dir查看目录,有无myblog项目
- 目录层级说明
manage.py 一个命令行工具,可以让我们用多种方式对Django项目进行交互
init.py 一个空文件,它告诉Python这个目录应该被看做一个包
settings.py 项目的配置文件(主要处理文件)
urls.py 项目的url声明 (主要处理文件)
wsgi.py 项目与WSGI兼容的Web服务器入口
配置数据库
Django默认使用SQLite数据库
在settings.py文件中通过DATABASES选项进行数据库配置
配置MySQL
Python3.x中安装的是PyMySQL
在__init__.py
文件中写入两行代码1
2import pymysql
pymysql.install_as_MySQLdb()
- myAPP目录说明
- admin.py 进行站点配置
- models.py 创建模型
- views.py 创建视图
创建应用
- 在一个项目中可以创建多个应用,每个应用进行一种业务处理
打开CMD,进入project
(目录激活应用 在settings.py文件中,
将myApp应用加入到INSTALLED_APPS选项中)1
2
3
4
5
6
7
8
9INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp',
]
定义模型
概述:有一个数据表就对应有一个模型
在models.py
文件中定义模型
引入:from django.db import models
模型类要继承models.Model
类1
2
3
4
5
6
7
8
9
10class Grades(models.Model):
gname = models.CharField(max_length=20) # 字符串类型
gdate = models.DateTimeField() # 时间类型
ggirlnum = models.IntegerField() # 整型类型
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False) # 布尔值类型
# 在布尔值类型中可以添加默认属性default=False
# 关联外键 models.ForeignKey("Grades")
#说明:需要定义主键,在生成时自动添加,并且值为自动增加
在数据库中生成数据表
- 生成迁移文件
执行python manage.py makemigrations
在migrations目录下生成一个迁移文件,此时数据库中还没有生成数据表 - 执行迁移
执行python manage.py migrate
相当于执行MySQL语句创建了数据表
测试数据操作
- 进入到python shell
- 执行
python manage.py shell
- 执行
- 引入包
1
2
3from myApp.models import Grades, Students
from django.utils import timezone
from datetime import *
- 查询所有数据
- 类名.objects.all()
- 示例: Grades.objects.all()
添加数据
- 本质:创建一个模型类的对象实例
- 示例:CMD窗口下
1
2
3
4
5
6grade1 = Grades()
grade1.gname = "python04"
grade1.gdate = datetime(year=2017, month=7, day=17)
grade1.ggirlnum = 3
grade1.gboynum = 70
grade1.save()
查看某个对象
- 类名.objects(pk=索引号)
- 示例:
1
2Grades.objects.get(pk=2) # 查找单个对象,pk=2 --查找第二个
Grades.objects.all()
修改某个数据
- 模型对象属性 = 新值
- 示例:
1
2grade2.gboynum = 60
grade2.save() # 保存修改至数据库
删除数据
- 模型对象.delete()
grade2.delete()
注意:这是物理删除,数据库中的相应数据被永久删除
关联对象
示例:
1
2
3
4
5
6
7stu = Students()
stu.sname = "Xue Yanmei"
stu.sgender = False
stu.sage = 20
stu.scontend = "I am Xue Yanmei"
stu.sgrade = grade1
stu.save()
获得关联对象的集合
- 需求:猎取python04班级的所有学生
- 对象名.关联的类名小写_set.all()
- 示例:
grade1.students_set.all()
需求:创建曾志伟,属于python04班级
示例:
1
2
3stu3 = grade1.students_set.create(
sname=u'Zhen Zhiwei',sgender=True,
scontend=u"I am Zhen Zhiwei",sage=45)
注意:这样创建的数据直接被添加到了数据库当中。
- 需求:猎取python04班级的所有学生
传递参数
request.GET['a']
Get看做是在
request
下的一个数组,而‘a’是一个键,则request.GET['a']
对于的就是通过Get方式发送的a的值
常用命令
命令 | ||
---|---|---|
启动命令 | python manage.py runserver 端口号 |
常见问题处理
- CSRF问题处理
当用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错
当用户访问login页面的时候,会生成一个csrf的随机字符串,,并且cookie中也存放了这个随机字符串,当用户再次提交数据的时候会带着这个随机字符串提交,如果没有这个随机字符串则无法提交成功
from django.views.decorators.csrf import csrf_exempt
1
2
3
def firstPageAdd(request)
return render(request,"firstclass_01.html",locals())