Django基础之环境配置、创建APP、视图层、模板渲染、设计库表、页面跳转示例
环境配置
安装python3.9
安装django:pip install django==3.2
创建APP【可直接用pycharm进行自动创建生成】
1、命令行创建django程序
A django-admin startproject mysite(创建project)
B 进入mysite目录
C python manage.py startapp omdb(创建APP,多次执行会生成多个app)
2、pycharm
创建完app如下
整个流程是:
用户先访问urls,通过urls路由找到处理请求的视图views,views从templates获取模板,从models获取数据库数据,最后展现在页面
settings为全局配置文件
urls为路由配置文件
视图层
1、编写app下views.py
1 from django.http import HttpResponse 2 3 def hello(request): 4 return HttpResponse("My Blog is OK!")
2、配置urls中的路由
1 from django.conf.urls import url 2 from django.contrib import admin 3 from omdb import views #导入app下的views 4 5 urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 url(r'^hello/', views.hello), #配置的路由 8 ]
3、启动django执行程序
启动:python manage.py runserver
模板渲染
views编写
配置路由
HTML引用变量
页面具体显示
设计库表
单表设计
models.py
1 from django.db import models 2 3 4 # Create your models here. 5 # 继承models的Model 6 class BookInfo(models.Model): 7 # 表字段为字符串类型,最大长度是20 8 btitle = models.CharField(max_length=20) 9 # 表字段为日期时间类型 10 bpub_date = models.DateField()
生成迁移文件
python3 manage.py makemigrations
执行迁移文件,生成表【如果没有切换数据库,默认会在sqlite中生成】
python3 manage.py migrate
一对多库表设计
models.py
1 from django.db import models 2 3 # 一类 4 # 图书类 5 class BookInfo(models.Model): 6 btitle = models.CharField(max_length=20) 7 bpub_date = models.DateField() 8 9 # 多类 10 # 英雄类 11 # 关系属性,建立图书类和英雄人物类之间的一对多的关系 12 class HeroInfo(models.Model): 13 hname = models.CharField(max_length=20) 14 hgender = models.BooleanField(default=False) 15 hcomment = models.CharField(max_length=145) 16 # ForeignKey外键设置,需要加上on_delete 17 hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
生成迁移文件,执行迁移文件【之前床的迁移文件不要删除!】
页面跳转示例
效果动图
HTML
分为两部分:一个是获取图书信息,一个是获取该图书详细信息
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>显示图书信息</title> 6 </head> 7 <body> 8 图书信息如下: 9 <ui> 10 {% for book in books %} 11 <li><a href="/books/{{ book.id }}">{{ book.btitle }}</a></li> 12 {% endfor %} 13 </ui> 14 </body> 15 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>图书关联的英雄</title> 6 </head> 7 <body> 8 <h1>{{ book.btitle }}</h1> 9 英雄的信息如下:<br> 10 <ui> 11 {% for hero in heros %} 12 <li>{{ hero.hname }}--{{ hero.hcomment }}</li> 13 {% empty %} 14 <li>没有信息</li> 15 {% endfor %} 16 </ui> 17 </body> 18 </html>
views
1 from django.http import HttpResponse 2 from django.http import JsonResponse 3 from django.shortcuts import render 4 from mysite.models import BookInfo 5 6 7 def show_books(request): 8 """显示图书信息""" 9 # 1、通过M查找数据库中的数据 10 books = BookInfo.objects.all() 11 # 2、使用模板 12 return render(request, 'index/show_books.html', 13 {"books": books} 14 ) 15 16 17 def detail(request, bid): 18 """查询图书关联的信息""" 19 # 1、根据bid查询图书 20 book = BookInfo.objects.get(id=bid) 21 # 2、查询book关联的英雄信息 22 heros = book.heroinfo_set.all() 23 # 3、使用模板 24 return render(request, 'index/detail.html', 25 {"book": book, "heros": heros} 26 )
urls
models
1 from django.db import models 2 3 # 一类 4 # 图书类 5 class BookInfo(models.Model): 6 btitle = models.CharField(max_length=20) 7 bpub_date = models.DateField() 8 9 def __str__(self): 10 # 返回书名 11 return self.btitle 12 13 # 多类 14 # 英雄类 15 # 关系属性,建立图书类和英雄人物类之间的一对多的关系 16 class HeroInfo(models.Model): 17 hname = models.CharField(max_length=20) 18 hgender = models.BooleanField(default=False) 19 hcomment = models.CharField(max_length=100) 20 # ForeignKey外键设置,需要加上on_delete 21 hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE) 22 23 def __str__(self): 24 # 返回名字和备注 25 return '{}{}'.format(self.hname, self.hcomment)