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)

 

posted @ 2018-01-20 20:16  韩凯1202  阅读(256)  评论(0编辑  收藏  举报