Django笔记01

Django

安装

pip install Django=1.11.4

验证

python
import django
django.get_version()

升级Django

pip install -U Django

创建项目

1.创建文件夹

2.cmd到文件夹下

3.创建admin文件夹

django-admin startproject project

4.查看树状层级

tree . /F

manage.py

一个命令行工具,可以使我们用多种方法对Django项目进行交互

_ init _.py

一个空文件,告诉Python这个项目应该被看做一个python包

settings.py

项目的配置文件

urls.py

项目的URL声明

wsgi.py

项目与WSGI兼容的WEB服务器入口

Django默认的数据库

默认使用sqlite3

在settings.py文件里,通过databases选项进行数据库配置

 

 

 

创建app

python manage.py startapp myApp #如果报错可能是python版本和django不兼容,升级django版本

 

admin.py 站点配置

models.py 模型

views.py 视图

激活应用

在settings.py文件中,将myapp加入到INSTALLED_APPS当中

 

定义模型

在models.py文件中定义模型

from django.db import models
模型类要继承models.Model类

定义一个简单的模型

在数据库中生成数据表

1. 生成迁移文件

生成迁移文件的报错:

TypeError: __init__() missing 1 required positional argument: 'on_delete'

需要在关联语句上加上:

sgrade = models.ForeignKey("Grades",on_delete=models.DO_NOTHING)

具体参数:

https://blog.csdn.net/m0_38109046/article/details/82660038

 

在migrations目录下生成一个迁移文件,此时数据库还没有表

2.执行迁移

 

 

相当于执行sql语句创建数据表

3.如果有新的表

 

再执行一次上两个命令,

4.如果有新的字段

最好删除数据库和

 

再执行上面的两句命令

测试操作数据

查询所有数据

使用utf-8编码的cmd

chcp 65001

引入包

 

就能进入管理界面

导入包

from myApp.models import Grades,Students
from django.utils import timezone
from datetime import *

 

报错:

warnings.warn("DateTimeField %s received a naive datetime (%s)"

解决:

https://www.cnblogs.com/sewen-H/p/13452819.html

报错2:

pymysql.err.IntegrityError: (1048, "Column 'isDelete' cannot be null")

解决:

设置值

在 python shell里添加数据

Grades.objects.all()

grade1 = Grades()
grade1.gname = "python02"
grade1.gdate =timezone.now()
grade1.ggirlnum = 12
grade1.gboynum = 5
grade1.isDelete = 0
grade1.save()

在数据库里查看

 

 

重新登录后,需要重新导入包返回值就不一样了

 

查看第二个数据

>>> Grades.objects.get(pk=2)
<Grades: python02-12-5>

 

修改数据

模型对象.属性 = 新值

>>> grade1.gboynum = 60
>>> grade1.save()

删除数据

模型对象删除 (物理山粗,数据库中的表里的数据被删除了)

grade1.delete()

关联对象

>>> grade1 = Grades.objects.get(pk=1)
>>> stu = Students()
>>> stu.sname = "wangmeng"
>>> stu.gender = False
>>> stu.sage = 20
>>> stu.scontend = "wojiaowangmeng"
>>> stu.isDelete = 0
>>> stu.sgrade = grade1
>>> stu.save()

 

获得关联对象的集合

需求:

获取python01班级的所有学生

再存一个人

>>> stu2 = Students()
>>> stu2.sname = "wangmeng "
>>> stu2.gender = False
>>> stu2.sage = 20
>>> stu2.scontend = "wo jiao wang meng"
>>> stu2.isDelete = 0
>>> stu2.sgrade = grade1
>>> stu2.save()
>>> grade1.students_set.all()
格式:
对象名.关联的类名小写_set.all()

需求:

创建一个同学,属于python01班

>>> stu3 = grade1.students_set.create(sname=u'laji',sgender=True,scontend='wo jiao',sage=32,isDelete=0)
>>> stu3
<Students: Students object (3)>

 

启动服务器

格式:
python manage.py runserver ip:port
ip可以不写,不写代表本机ip。
端口号默认8000
本机测试
python manage.py runserver

说明

这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用

 

Admin站点管理

概述

内容发布

负责添加、修改、删除内容数据库

公告访问

配置Admin应用

在settings.py 文件中的INSTALLED_APPS中添加'django.contrib.admin',默认是已经添加好的

创建管理员用户

 

汉化

 

LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'

不用重启服务,直接刷新就可以了

管理数据表

修改admin.py文件

from.models import Grades,Students
#注册
admin.site.register(Grades)
admin.site.register(Students)

自定义管理页面

属性说明

# 列表页属性
list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete'] #显示字段
list_filter = ['gname'] #过滤字段
#search_fields = ['gname'] # 搜索字段
list_per_page = 5 #分页

# 添加、修改页属性
#fields = ['ggirlnum','gboynum','gname','gdate','isDelete'] #规定属性的先后顺序
fieldsets = [
	("num",{"fields":['ggirlnum','gboynum']}),
	("base",{"fields":['gname','gdate','isDelete']}),
]    #给属性添加分组 !!!这两个不能同时使用!!!

 

关联对象

需求:

在创建一个班级时,可以直接添加几个学生

在admin.py(视图管理)

 

效果:

 

布尔值显示问题(显示男女)

 

效果:

 

#设置页面列的名称
gender.short_description = '性别'

执行动作的位置

 

效果:

 

视图的基本使用

概述:

在django中,视图对web请求进行回应

视图就是一个python函数,在views.py文件中定义

定义视图

在views.py文件

一个简易定义视图

from django.http import HttpResponse
# request就是请求体
def index(request):
    return HttpResponse('i am so fucking good')

配置url

修改project目录下的urls.py文件

from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
urlpatterns = [
    path('admin/', admin.site.urls),
    #url(r'^admin/', admin.site.urls),
    url(r'', include('myApp.urls')),
]

project的urls.py指向myApp里的urls.py文件

在myApp应用目录下创建一个urls.py文件

from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
#    path('',views.index)
    url(r'^$', views.index)
]

效果:

 

views.py

from django.http import HttpResponse

# request就是请求体
def index(request):
    return HttpResponse("i am a good man")

def detail(request,num,num2):
    return HttpResponse("detail-%s-%s" %(num,num2))

myApp\urls.py

from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
#    path('',views.index)
    url(r'^$', views.index),
    url(r'^(\d+)/(\d+)$', views.detail),
]

效果:

 

模板的基本使用

概述:

模板是HTML页面,可以根据视图中传递过来的数据进行填充

创建模板目录:

创建templates目录,在目录下创建对应项目的模板目录(project/templates/myApp)

配置模板路径:

修改settings.py文件下的TEMPLATES

 

定义grades.html和students.html的模板:

模板语法:

{{输出值,可以是变量,也可以是对象.属性}}

{{%执行代码段%}}

http://127.0.0.1:8000/grades

grades.html

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级信息</title>
</head>
<body>
    <h1>班级信息列表</h1>
    <u1>
    <!--python04,python05,python06-->
        {%for grade in grades%}
        <li>
        <!--创建一个循环,每一次循环创建要给li-->
            <a href="{{grade.id}}">{{grade.gname}}
            <!--拿的models.py里的对象-->
            </a>
        </li>
        {%endfor%}
    </u1>
</body>
</html>

写myApp\urls.py(配置url)

from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
#    path('',views.index)
    url(r'^$', views.index),
    url(r'^(\d+)/(\d+)$', views.detail),

    url(r'^grades/$', views.grades),
    url(r'^students/$', views.students),

    url(r'^grades/(\d+)$' , views.gradesStudents)
]

写views.py(定义视图)

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse

# request就是请求体
def index(request):
    return HttpResponse("i am a good man")

def detail(request,num,num2):
    return HttpResponse("detail-%s-%s" %(num,num2))

from .models import Grades,Students

def grades(request):
    #去模板里取数据
    gradeList = Grades.objects.all()
    #将数据传递给模板,模板再渲染页面,再将渲染好的页面返回给游览器
    return render(request,'myApp/grades.html' , {"grades":gradeList})

def students(request):
    studentList = Students.objects.all()
    return render(request,'myApp/students.html' , {"students":studentList})

def gradesStudents(request,num):
    grade = Grades.objects.get(pk=num)
    studentsList = grade.students_set.all()
    return render(request,'myApp/students.html', {"students":studentsList})

 

复制的项目如何使用

1.复制

2.删除迁移的001文件

3.在settings.py里改数据库(数据库名,数据库密码)

4.在数据库中创建对应的数据库

5.重新生成迁移文件

6.执行迁移

7.启动数据库

8.测试

如何加入css样式

1.建立静态文件的文件夹

 

2.配置文件夹为项目的合法静态文件夹

settings.py

#静态文件的访问URL

STATIC_URL = '/static/'

#配置静态文件夹
STATICFILES_DIRS = [
     os.path.join(BASE_DIR, 'static'),
]

3.在游览器上查看是否能访问静态文件夹里的文件和css样式

 

 

4.修改html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值