Fork me on GitHub

Python_Web_Django

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
2
import 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
9
INSTALLED_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
10
class 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
    3
    from myApp.models import Grades, Students
    from django.utils import timezone
    from datetime import *
  • 查询所有数据
    • 类名.objects.all()
    • 示例: Grades.objects.all()
  • 添加数据

    • 本质:创建一个模型类的对象实例
    • 示例:CMD窗口下
      1
      2
      3
      4
      5
      6
      grade1 = Grades()
      grade1.gname = "python04"
      grade1.gdate = datetime(year=2017, month=7, day=17)
      grade1.ggirlnum = 3
      grade1.gboynum = 70
      grade1.save()
  • 查看某个对象

    • 类名.objects(pk=索引号)
    • 示例:
      • 1
        2
        Grades.objects.get(pk=2)  # 查找单个对象,pk=2 --查找第二个
        Grades.objects.all()
  • 修改某个数据

    • 模型对象属性 = 新值
    • 示例:
      • 1
        2
        grade2.gboynum = 60
        grade2.save() # 保存修改至数据库
  • 删除数据

    • 模型对象.delete()
    • grade2.delete()
      注意:这是物理删除,数据库中的相应数据被永久删除


  • 关联对象

    • 示例:

      • 1
        2
        3
        4
        5
        6
        7
        stu = 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
            3
            stu3 = grade1.students_set.create(
            sname=u'Zhen Zhiwei',sgender=True,
            scontend=u"I am Zhen Zhiwei",sage=45)

          注意:这样创建的数据直接被添加到了数据库当中。


传递参数

request.GET['a']

Get看做是在request下的一个数组,而‘a’是一个键,则request.GET['a']对于的就是通过Get方式发送的a的值

img

常用命令

命令
启动命令 python manage.py runserver 端口号

常见问题处理

  • CSRF问题处理

    当用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错

当用户访问login页面的时候,会生成一个csrf的随机字符串,,并且cookie中也存放了这个随机字符串,当用户再次提交数据的时候会带着这个随机字符串提交,如果没有这个随机字符串则无法提交成功

from django.views.decorators.csrf import csrf_exempt

1
2
3
@csrf_exempt
def firstPageAdd(request)
return render(request,"firstclass_01.html",locals())

喜欢的可以对我打赏了哟~