Django基础(一)
创建Django项目
django-admin startproject MyDjango
cd MyDjango
python manage.py startapp index #创建应用:index
可以使用cmd的tree命令查看目录树
tree /f
views.py: ,接收请求,进行处理,与M和T进行交互,返回应答。定义处理函数,视图函数
tests.py:写测试代码的文件,用于实现单元测试。
admin.py:网站后台管理相关的文件。建立应用和项目之间的联系,需要对应用进行注册,修改settings.py中的INSTALLED_APPS配置项
_init.py:说明目录是一个Python模块
models.py:写和数据库项目的内容,每个类可以关联一张数据表
运行开发web服务器命令
python manage.py runserver 8002
没有设置端口就默认端口为8000
注:没有ico图标,所以在日志中报错404,没影响
models.py——设计和表对应的类,模型类
模型类
模型设计类
在models.py中设计模型类
必须继承与models.Model类
1)设计BookInfo类
2)设计HeroInfo类
Models.ForeignKey可以建立两个模型类之间一对多的关系,django在生成表的时候,就会在多的表中创建一列作为外键,建立两个表之间一对多的关系。
diango.中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。
设计类︰模型类。
ORM另外一个作用︰根据设计的类生成数据库中的表。
第一个表BookInfo类
1 from django.db import models 2 3 # Create your models here. 4 #图书类 5 class BookInfo(models.Model):#继承于models模块里的Model类 6 #图书模型类 7 #类属性对应表里的字段 8 #图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度 9 btitle=models.CharField(max_length=20) 10 #出版日期,DateField说明是一个日期模型 11 bpub_date=models.DateField()
1)生成迁移文件
命令: python manage.py makemigrations 迁移文件是根据模型类生成的。
2)执行迁移生成表
命令: python manage.py migrate 根据迁移文件生成表.
生成表名的默认格式:
应用名_模型类名小写
第二个表HeroInfo类
# 关系属性对应的表的字段名格式:关系属性名_id(外键)
1 from django.db import models 2 3 # Create your models here. 4 #一类 5 #图书类 6 class BookInfo(models.Model):#继承于models模块里的Model类 7 #图书模型类 8 #类属性对应表里的字段 9 #图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度 10 btitle=models.CharField(max_length=20) 11 #出版日期,DateField说明是一个日期模型 12 bpub_date=models.DateField() 13 #多类 14 #人物类 15 class HeroInfo(models.Model): 16 hname=models.CharField(max_length=20)#名 17 hgender=models.BooleanField(default=False)#性别,BooleanField说明是bool类型,default指定默认值,False代表男 18 #备注 19 hcomment=models.CharField(max_length=128) 20 # 关系属性,建立图书和物一对多关系 21 # 关系属性对应的表的字段名格式:关系属性名_id(外键) 22 hbook=models.ForeignKey(to="BookInfo",on_delete=models.CASCADE)
如果报错TypeError: __init__() missing 1 required positional argument: 'on_delete'
问题出在models.py,应写上:
hbook=models.ForeignKey(to="BookInfo",on_delete=models.CASCADE)
python manage.py migrate
数据库操作
表1
增删查改语句:
插入语句
查询语句
更新语句
删除语句
后台管理
1)本地化
语言和时区的本地化
修改settings.py
2)创建管理员
python manage.py createsuperuser
打开浏览器,输入网址http://127.0.0.1:8000/admin
3)注册模型类
在应用下的admin.py中注册模型类
告诉django框架根据注册的模型类来生成对应表管理页面
b=BookInfo()
str(b)_str_
1 from django.contrib import admin 2 from index.models import BookInfo 3 # 后台管理相关文件 4 # Register your models here. 5 #注册模型类 6 admin.site.register(BookInfo)
显示图书标题
查看str返回值
改变str返回值
models.py里重写方法
class BookInfo(models.Model):#继承于models模块里的Model类
#图书模型类
#类属性对应表里的字段
#图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度
btitle=models.CharField(max_length=20)
#出版日期,DateField说明是一个日期模型
bpub_date=models.DateField()
def __str__(self):
# 返回书名
return self.btitle
右侧可增加BOOK INFO
同理,增加第二个表Hero infos类
admin.py
from django.contrib import admin from index.models import BookInfo,HeroInfo # 后台管理相关文件 # Register your models here. #注册模型类 admin.site.register(BookInfo) admin.site.register(HeroInfo)
models.py
1 from django.db import models 2 3 # Create your models here. 4 #一类 5 #图书类 6 class BookInfo(models.Model):#继承于models模块里的Model类 7 #图书模型类 8 #类属性对应表里的字段 9 #图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度 10 btitle=models.CharField(max_length=20) 11 #出版日期,DateField说明是一个日期模型 12 bpub_date=models.DateField() 13 14 def __str__(self): 15 # 返回书名 16 return self.btitle 17 18 #多类 19 #人物类 20 class HeroInfo(models.Model): 21 hname=models.CharField(max_length=20)#名 22 hgender=models.BooleanField(default=False)#性别,BooleanField说明是bool类型,default指定默认值,False代表男 23 #备注 24 hcomment=models.CharField(max_length=128) 25 # 关系属性,建立图书和物一对多关系 26 # 关系属性对应的表的字段名格式:关系属性名_id(外键) 27 hbook=models.ForeignKey(to="BookInfo",on_delete=models.CASCADE) 28 def __str__(self): 29 # 返回名字 30 return self.hname
4)自定义管理页面
自定义模型管理类,模型管理类就是生成django在生成的管理页面上显示哪些内容
admin.py
1 from django.contrib import admin 2 from index.models import BookInfo,HeroInfo 3 # 后台管理相关文件 4 # Register your models here. 5 #自定义模型管理类 6 #图书模型管理类 7 class BookInfoAdmin(admin.ModelAdmin):#继承于admin.ModelAdmin 8 # list_display页面显示的内容 9 list_display=['id','btitle','bpub_date']#类属性 10 #英雄人物管理类 11 class HeroInfoAdmin(admin.ModelAdmin): 12 list_display = ['id', 'hname', 'hcomment'] 13 #注册模型类:只能各写一个,不能重复写 14 admin.site.register(BookInfo,BookInfoAdmin) 15 admin.site.register(HeroInfo,HeroInfoAdmin)
视图
在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的,视图函数处理之后,要给浏览器返回页面内容
视图函数的使用
1)定义视图函数
视图函数定义在views.py中
index/urls.py
from django.urls import path from . import views # 创建一个列表 # url地址和视图的对应 urlpatterns=[ # 通过url函数设置url路由配置项,要先在项目的urls中加配置项 # 建立/index和视图index之间的关系 path('index',views.index), #左边index:index文件夹。括号内为地址和地址对应的视图 path('index2',views.index2), ]
Mydjango/urls.py
1 from django.urls import path 2 from django.conf.urls import include, url 3 from django.contrib import admin 4 5 # 项目的urls文件#这里容易报错 6 urlpatterns = [ 7 path('admin/', admin.site.urls), 8 path('',include('index.urls')),#包括booktest应用中的url文件 9 ]
views.py
from django.http import HttpResponse # Create your views here. # 1.定义视图函数,HttpRequest # 2.进行url配置,建立url地址和视图的对应关系 # http://127.0.0.1:8000/index def index(request): # 进行处理,和M和T进行交互 return HttpResponse('hello~') # 返回给浏览器 def index2(request): # 进行处理,和M和T进行交互 return HttpResponse('你好~') # 返回给浏览器
python manage.py runserver
模板的使用
新建文件夹
模板文件 这是一个模板文件,{{ content }}
views.py
from django.shortcuts import render from django.http import HttpResponse from django.template import loader,RequestContext def my_render(request, template_path, context_dict={}): #使用模板文件 #1.加载模板文件,模板对象 temp=loader.get_template(template_path) #2.定义模板上下文:给模板文件传递数据 # context=RequestContext(request,context_dict)#这个会报错 context =context_dict #3.模板渲染:产生标准的html内容 res_html=temp.render(context) #4.返回给浏览器 return HttpResponse(res_html) # Create your views here. # 1.定义视图函数,HttpRequest # 2.进行url配置,建立url地址和视图的对应关系 # http://127.0.0.1:8000/index def index(request): # 进行处理,和M和T进行交互 # return HttpResponse('hello~') # 返回给浏览器 return my_render(request,'index/index.html',{'content':'hello word'})
index/urls.py
from django.urls import path from . import views # 创建一个列表 # url地址和视图的对应 urlpatterns=[ # 通过url函数设置url路由配置项,要先在项目的urls中加配置项 # 建立/index和视图index之间的关系 path('index',views.index), #左边index:index文件夹。括号内为地址和地址对应的视图 ]
连接数据库
新建html
"en"> "UTF-8">显示图书 {% for book in books %}
#views.py from django.shortcuts import render from index.models import BookInfo#导入图书模型类 from django.http import HttpResponse from django.template import loader,RequestContext def my_render(request, template_path, context_dict={}): #使用模板文件 #1.加载模板文件,模板对象 temp=loader.get_template(template_path) #2.定义模板上下文:给模板文件传递数据 # context=RequestContext(request,context_dict)#这个会报错 context =context_dict #3.模板渲染:产生标准的html内容 res_html=temp.render(context) #4.返回给浏览器 return HttpResponse(res_html) # Create your views here. # 1.定义视图函数,HttpRequest # 2.进行url配置,建立url地址和视图的对应关系 # http://127.0.0.1:8000/index def index(request): # 进行处理,和M和T进行交互 # return HttpResponse('hello~') # 返回给浏览器 return my_render(request,'index/index.html',{'content':'hello word'}) def index2(request): # 进行处理,和M和T进行交互 return HttpResponse('你好~') # 返回给浏览器 def show_books(request): books=BookInfo.objects.all() return render(request,'index/show_books.html',{'books':books})
#MyDjango/urls.py from django.urls import path from django.conf.urls import include from django.contrib import admin # 项目的urls文件 urlpatterns = [ path('admin/', admin.site.urls), path('',include('index.urls')),#包括booktest应用中的url文件
#index/urls.py from django.urls import path from . import views # 创建一个列表 # url地址和视图的对应 urlpatterns=[ # 通过url函数设置url路由配置项,要先在项目的urls中加配置项 # 建立/index和视图index之间的关系 path('index',views.index), #左边index:index文件夹。括号内为地址和地址对应的视图 path('index2',views.index2), path('books',views.show_books),#显示图书信息 ]