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 %}
    
  • {{ book.btitle }}
  • {% endfor %}
    #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),#显示图书信息
    ]