Django_182_入门指南

pip install Django==1.8.2

入门

创建Django项目

django-admin startproject 项目名

在这里插入图片描述
Django_182_入门指南_第1张图片

创建应用(每个项目有不同的应用)

cd CTTIC
python manage.py startapp 应用名

在这里插入图片描述
Django_182_入门指南_第2张图片

应用注册

建立应用和项目之间的联系,需要对应用进行注册
CTTIC/settings.py进行修改

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',  #新增,为应用名
)

运行

python manage.py runserver

Django_182_入门指南_第3张图片
Django_182_入门指南_第4张图片

ORM

设计模型类

app/models.py中设计模型类

id btitle bpub_date
#-*- coding:utf-8 -*-
from django.db import models

# Create your models here.
#图书类
class BookInfo(models.Model):
    '''图书模型类'''
    #id 自动生成
    #图书名称
    btitle = models.CharField(max_length=20)
    #出版日期
    bpub_date = models.DateField()

模型生成数据库表

生成迁移文件

python manage.py makemigrations

Django_182_入门指南_第5张图片
Django_182_入门指南_第6张图片

执行迁移文件生成表

python manage.py migrate

Django_182_入门指南_第7张图片
默认使用 sqlite3 数据库
CTTIC/settings.py 查看配置信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

更改使用 MySQL 数据库

pip install pymysql

使用的数据库需要提前创建出来
CTTIC/settings.py 中修改

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        'ENGINE': 'django.db.backends.mysql',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'NAME': 'test',            #使用数据库的名字,数据库需要手动创建
        'USER': 'root',            #链接mysql的用户名
        'PASSWORD': 'xxxxxxxxxxx', #用户对应的密码
        'HOST': 'localhost',       #指定数据库IP
        'PORT': 3306,              #端口
    }
}

CTTIC/CTTIC/__init__.py 去驱动模块进行配置

import pymysql
pymysql.install_as_MySQLdb()

服务器启动测试代码是否跑通

python manage.py runserver

重新执行迁移文件生成表

python manage.py makemigrations
python manage.py migrate

Django_182_入门指南_第8张图片

通过模型类操作数据表

python manage.py shell

数据添加

from app.models import BookInfo   #导入类
b = BookInfo()      #创建类的对象
b.btitle = 'Python编程从入门到精通'	#给对象增加实例属性
from datetime import date
b.bpub_date = date(2016,7,1)
b.save() #数据添加

Django_182_入门指南_第9张图片
在这里插入图片描述

数据查询

result = BookInfo.objects.get(id=1)

Django_182_入门指南_第10张图片

数据更新

对象属性重新赋值
Django_182_入门指南_第11张图片
在这里插入图片描述

数据删除

对象.delete()方法即可删除
在这里插入图片描述
在这里插入图片描述

模型关系

一对多关系表,例如:一本书中有多个英雄
app/models.py 编写

#-*- coding:utf-8 -*-
from django.db import models

# Create your models here.
#图书类
class BookInfo(models.Model):
    '''图书模型类'''
    #id 自动生成
    #图书名称
    btitle = models.CharField(max_length=20)
    #出版日期
    bpub_date = models.DateField()

#英雄人物类
class HeroInfo(models.Model):
    #英雄名 hname
    hname = models.CharField(max_length=20)
    # 性别 hgender,并指定默认值
    hgender = models.BooleanField(default=False)
    # 备注 hcomment
    hcomment = models.CharField(max_length=128)
    #关系属性,建立图书类和英雄人物类之间的一对多关系
    hbook = models.ForeignKey('BookInfo')

执行迁移文件生成表

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
在这里插入图片描述

对关系型数据表进行操作

一对多关系表,数据添加

from app.models import BookInfo,HeroInfo
b = BookInfo()
b.btitle = '天龙八部'
from datetime import date
b.bpub_date = date(1990,1,1)
b.save()
h = HeroInfo()
h.hname = '段誉'
h.hgender = False
h.hcomment = '六脉神剑'
h.hbook = b
h.save()

h2 = HeroInfo()
h2.hname = '乔峰'
h2.hcomment = '降龙十八掌'
h2.hbook = b
h2.save()

Django_182_入门指南_第12张图片
Django_182_入门指南_第13张图片

一对多关系表,数据查询

查询表中所有内容
BookInfo.objects.all()
HeroInfo.objects.all()

Django_182_入门指南_第14张图片

由多查一
h.hbook
result = HeroInfo.objects.get(id=3)
print(result.hname)
print(result.hgender)
print(result.hcomment)
print(result.hbook)
print(result.hbook.btitle)

Django_182_入门指南_第15张图片

由一查多
b.heroinfo_set.all()

在这里插入图片描述

后台管理

本地化

语言和时区的本地化
修改 CTTIC/CTTIC/settings.py 下的配置信息

#语言
LANGUAGE_CODE = 'zh-hans'
#时区
TIME_ZONE = 'Asia/Shanghai'

创建管理员账户

python manage.py createsuperuser

Django_182_入门指南_第16张图片
启动服务,通过浏览器登陆后台管理

python manage.py runserver

http://127.0.0.1:8000/admin
Django_182_入门指南_第17张图片
在这里插入图片描述

注册模型类

让Django框架根据注册的模型类生成对应表管理页面
CTTIC/app/admin.py中注册模型类

from django.contrib import admin
from app.models import BookInfo
# Register your models here.
admin.site.register(BookInfo)

Django_182_入门指南_第18张图片
Django_182_入门指南_第19张图片
在这里插入图片描述
更改默认显示的字符串,修改 CTTIC/app/models.py

class BookInfo(models.Model):
    '''图书模型类'''
    #id 自动生成
    #图书名称
    btitle = models.CharField(max_length=20)
    #出版日期
    bpub_date = models.DateField()
    
    def __str__(self):
        # 返回书名
        return self.btitle

Django_182_入门指南_第20张图片

自定义管理界面的显示

修改 CTTIC/app/admin.py

#-*- coding:utf-8 -*-
from django.contrib import admin
from app.models import BookInfo,HeroInfo
# Register your models here.
# 自定义模型管理类
class BookInfoAdmin(admin.ModelAdmin):
    '''图书模型管理类'''
    list_display = ['id','btitle','bpub_date']

#注册模型类
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo)

Django_182_入门指南_第21张图片

视图

Django 通过浏览器去请求一个页面时,使用试图函数来处理这个请求,视图函数处理之后,要给浏览器返回页面内容

编写视图函数

CTTIC/app/views.py 修改代码

#-*- coding:utf-8 -*-
from django.http import HttpResponse
# Create your views here.
# 访问 http://127.0.0.1:8000/index
def index(request):
    return HttpResponse('老铁!没毛病')

URL路由配置

CTTIC/CTTIC/urls.py 中添加

#-*- coding:utf-8 -*-
from django.conf.urls import include, url
from django.contrib import admin

# 项目的urls文件
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^',include('app.urls')), #新增app应用中urls路由配置项
]

建立地址与视图处理函数的对应
新建 CTTIC/app/urls.py

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    # 通过url函数设置url配置项
    url(r'^index',views.index), #建立 /index 与 视图index函数之间的关系
]

项目启动

python manage.py runserver

Django_182_入门指南_第22张图片
Django_182_入门指南_第23张图片

路由地址严格匹配

CTTIC/app/views.py 修改代码

#-*- coding:utf-8 -*-
from django.http import HttpResponse
# Create your views here.
# 访问 http://127.0.0.1:8000/index
def index(request):
    return HttpResponse('老铁!没毛病')

def index2(request):
    return HttpResponse('Index2 页面')

CTTIC/CTTIC/urls.py 的代码不变

#-*- coding:utf-8 -*-
from django.conf.urls import include, url
from django.contrib import admin

# 项目的urls文件
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^',include('app.urls')), #新增app应用中urls路由配置项
]

添加 CTTIC/app/urls.py 路由,严格匹配

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    # 通过url函数设置url配置项
    url(r'^index$',views.index), #建立 /index 与 视图index函数之间的关系
    url(r'^index2$',views.index2),
]

Django_182_入门指南_第24张图片
Django_182_入门指南_第25张图片

捕获url参数

进行url匹配时,把所需要的捕获的部分设置成一个正则表达式组,这样django框架就会自动把匹配成功后相应组的内容作为参数传递给视图函数

  1. 位置参数
    位置参数,参数名可以随意指定
  2. 关键字参数:在位置参数的基础上给正则表达式组命名即可。
    ?P<组名>
    关键字参数,视图中参数名必须和正则表达式组名一致
    Django_182_入门指南_第26张图片

新增 CTTIC/app/urls.py

from django.conf.urls import url
from app import views
urlpatterns = [
    url(r'^showarg(\d+)$',views.showarg_location),   #捕获url参数:位置参数
    url(r'showarg(?P\d+)$',views.showarg_key),  #捕获url参数:关键字参数
]

CTTIC/app/views.py 中编辑视图函数

from django.http import HttpResponse

def showarg_location(request,bid):
    return HttpResponse(bid)

def showarg_key(request,num):
    return HttpResponse(num)

Django_182_入门指南_第27张图片

视图函数中的 request

request 就是httpRequest类型的对象
request 包含浏览器请求的信息

模板

创建模板文件夹

新建 CTTIC/templates 文件夹
Django_182_入门指南_第28张图片

配置模板目录

CTTIC/CTTIC/settings.py中设置模板目录位置

# 项目目录绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')], #设置模板目录位置
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

使用模板文件

新建CTTIC/templates/app/index.html 文件


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<h1>这是一个模板文件h1>
body>
html>

修改 CTTIC/app/views.py 中视图处理函数

#-*- coding:utf-8 -*-
from django.http import HttpResponse
from django.template import loader,RequestContext
# Create your views here.
# 访问 http://127.0.0.1:8000/index
def index(request):
    # 加载模板文件
    temp = loader.get_template('app/index.html')
    # 定义模板上下文,给模板文件传数据
    context = RequestContext(request,{})
    # 模板渲染 : 产生标准的HTML内容
    res_html = temp.render(context)
    # 返回给浏览器
    return HttpResponse(res_html)

Django_182_入门指南_第29张图片
上述视图函数简化

from django.http import HttpResponse
from django.template import loader,RequestContext
# Create your views here.
# 访问 http://127.0.0.1:8000/index
def my_render(request,template_path,context_dict={}):
    temp = loader.get_template(template_path)
    # 定义模板上下文,给模板文件传数据
    context = RequestContext(request, context_dict)
    # 模板渲染 : 产生标准的HTML内容
    res_html = temp.render(context)
    # 返回给浏览器
    return HttpResponse(res_html)

def index(request):
    return my_render(request,'app/index.html')

Django 提供的render()函数 实现了上述简化的功能

from django.shortcuts import render
def index(request):
    return render(request,'app/index.html')

通过模板给页面传递数据

CTTIC/templates/app/index.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<h1>这是一个模板文件h1>
使用模板变量: <br/> {{ content }} <br/>
使用列表:<br/> {{ list }}   <br/>
使用 for 循环: <br/>
<ul>
    {% for i in list %}
        <li>{{ i }}li>
    {% endfor %}
ul>
body>
html>

CTTIC/app/views.py

from django.shortcuts import render
def index(request):
    context_dict = {
        'content':'hello world',
        'list':list(range(1,10)),
    }
    return render(request,'app/index.html',context_dict)

Django_182_入门指南_第30张图片

案例

页面显示数据库中的内容

Django_182_入门指南_第31张图片
添加 CTTIC/app/views.py中视图函数

from django.shortcuts import render
from app.models import BookInfo
def show_books(request):
    '''显示数据库图书信息'''
    # 通过模型查找数据库信息
    books = BookInfo.objects.all()
    context = {
        'books':books
    }
    return render(request,'app/show_books.html',context)

CTTIC/CTTIC/urls.py 配置项目路由

from django.conf.urls import include, url
from django.contrib import admin

# 项目的urls文件
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^',include('app.urls')), #新增app应用中urls路由配置项
]

CTTIC/app/urls.py 配置应用路由

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    # 通过url函数设置url配置项
    url(r'^index$',views.index), #建立 /index 与 视图index函数之间的关系
    url(r'^index2$',views.index2),
    url(r'^books$',views.show_books), #新增
]

新建CTTIC/templates/app/show_books.html页面


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示图书title>
head>
<body>
图书信息如下<br/>
<ur>
    {% for book in books %}
        <li>{{ book.btitle }}li>
    {% endfor %}
ur>
body>
html>

Django_182_入门指南_第32张图片

点击页面跳转

点击页面跳转到另一个页面,并显示与之相关的信息
CTTIC/templates/app/show_books.html

<body>
图书信息如下<br/>
<ur>
    {% for book in books %}
        <li><a href="/books/{{ book.id }}">{{ book.btitle }}a>li>
    {% endfor %}
ur>
body>

Django_182_入门指南_第33张图片
添加 CTTIC/app/views.py 添加视图函数

from django.shortcuts import render
from app.models import BookInfo
def detail(request,bid):
    '''查询图书关联的表的英雄信息'''
    #根据bid查询图书信息
    book = BookInfo.objects.get(id=bid)
    #查询和bid图书关联的英雄信息
    heros = book.heroinfo_set.all()
    # 使用模板将数据展示
    context = {
        'book':book,
        'heros':heros,
    }
    return render(request,'app/detail.html',context)

CTTIC/app/urls.py 配置应用路由

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    # 通过url函数设置url配置项
    url(r'^index$',views.index), #建立 /index 与 视图index函数之间的关系
    url(r'^index2$',views.index2),
    url(r'^books$',views.show_books),  #显示图书信息
    url(r'^books/(\d+)$',views.detail), #显示英雄信息
]

新建 CTTIC/templates/app/details.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示管理的英雄信息title>
head>
<body>
<h1>{{ book.btitle }}h1>
英雄信息如下:<br>
<ul>
    {% for hero in heros %}
        <li>{{ hero.hname }}--{{ hero.hcomment }}li>
        {% empty %} 
            <li>没有英雄信息li>
    {% endfor %}
ul>
body>
html>

Django_182_入门指南_第34张图片

通过页面进行增删改查

丰富一下数据表的结构内容,并添加一些模拟数据
CTTIC/app/models.py

#-*- coding:utf-8 -*-
from django.db import models

# Create your models here.
#图书类
class BookInfo(models.Model):
    '''图书模型类'''
    #id 自动生成
    #图书名称
    btitle = models.CharField(max_length=20)
    #出版日期
    bpub_date = models.DateField()
    #阅读量
    bread = models.IntegerField(default=0)
    #评论量
    bcomment = models.IntegerField(default=0)
    #删除标记
    isDelete = models.BooleanField(default=False)

    def __str__(self):
        # 返回书名
        return self.btitle

#英雄人物类
class HeroInfo(models.Model):
    #英雄名 hname
    hname = models.CharField(max_length=20)
    # 性别 hgender,并指定默认值
    hgender = models.BooleanField(default=False)
    # 备注 hcomment
    hcomment = models.CharField(max_length=128)
    #关系属性,建立图书类和英雄人物类之间的一对多关系
    hbook = models.ForeignKey('BookInfo')

    def __str__(self):
        return self.hname
python manage.py makemigrations
python manage.py migrate

通过SQL添加测试数据

INSERT INTO `app_bookinfo` (`id`, `btitle`, `bpub_date`, `bread`, `bcomment`, `isDelete`) VALUES (5, '射雕英雄传', '1980-5-1', 12, 34, 0);
INSERT INTO `app_bookinfo` (`id`, `btitle`, `bpub_date`, `bread`, `bcomment`, `isDelete`) VALUES (6, '天龙八部', '1986-7-24', 36, 40, 0);
INSERT INTO `app_bookinfo` (`id`, `btitle`, `bpub_date`, `bread`, `bcomment`, `isDelete`) VALUES (7, '笑傲江湖', '1995-12-24', 20, 80, 0);
INSERT INTO `app_bookinfo` (`id`, `btitle`, `bpub_date`, `bread`, `bcomment`, `isDelete`) VALUES (8, '雪山飞狐', '1987-11-11', 58, 24, 0);

INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (6, '郭靖', 1, 5, '降龙十八掌', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (7, '黄蓉', 0, 5, '打狗棒法', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (8, '黄药师', 1, 5, '弹指神功', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (9, '欧阳锋', 1, 5, '蛤蟆功', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (10, '梅超风', 0, 5, '九阴白骨爪', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (11, '乔峰', 1, 6, '降龙十八掌', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (12, '段誉', 1, 6, '六脉神剑', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (13, '虚竹', 1, 6, '天山六阳掌', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (14, '王语嫣', 0, 6, '神仙姐姐', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (15, '令狐冲', 1, 7, '独孤九剑', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (16, '任盈盈', 0, 7, '弹琴', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (17, '岳不群', 1, 7, '华山剑法', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (18, '东方不败', 1, 7, '葵花宝典', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (19, '胡斐', 1, 8, '胡家刀法', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (20, '苗若兰', 0, 8, '黄衣', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (21, '程灵素', 0, 8, '医术', 0);
INSERT INTO `app_heroinfo` (`id`, `hname`, `hgender`, `hbook_id`, `hcomment`, `isDelete`) VALUES (22, '袁紫衣', 0, 8, '六合掌', 0);

数据添加,页面重定向

CTTIC/templates/app/show_books.html

<body>
<a href="/create">新增a> <br/>      
图书信息如下<br/>
<ur>
    {% for book in books %}
        <li><a href="/books/{{ book.id }}">{{ book.btitle }}a>li>
    {% endfor %}
ur>
body>

CTTIC/app/views.py 添加数据的视图函数

from django.http import HttpResponseRedirect
from app.models import BookInfo
from datetime import date
def create(request):
    '''图书表新增数据'''
    # 新建 BookInfo对象
    b = BookInfo()
    b.btitle = '流星蝴蝶剑'
    b.bpub_date = date(1990,1,1)
    b.bread = 20
    b.bcomment = 30
    # 数据保存
    b.save()
    # 页面重定向
    return HttpResponseRedirect('/books')

配置应用路由CTTIC/app/urls.py

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    # 通过url函数设置url配置项
    url(r'^books$',views.show_books),  #显示图书信息
    url(r'^books/(\d+)$',views.detail), #显示英雄信息
    url(r'create$',views.create),  # 新增数据
]

Django_182_入门指南_第35张图片

数据删除,页面重定向

编辑 CTTIC/templates/app/show_books.html

<body>
<a href="/create">新增a> <br/>      
图书信息如下<br/>
<ur>
    {% for book in books %}
        <li><a href="/books/{{ book.id }}">{{ book.btitle }}a> --<a href="/delete{{ book.id }}">删除a> li>
    {% endfor %}
ur>
body>

CTTIC/app/views.py 删除数据的视图函数

from django.http import HttpResponseRedirect
from app.models import BookInfo
def delete(request,bid):
    '''删除数据'''
    #通过bid获取图书对象
    book = BookInfo.objects.get(id=bid)
    #删除
    book.delete()
    #页面重定向
    return HttpResponseRedirect('/books')

重定向的另一种写法

from django.shortcuts import redirect
def delete(request,bid):
    '''删除数据'''
    ......
    return redirect('/books')

配置应用路由CTTIC/app/urls.py

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    # 通过url函数设置url配置项
    url(r'^books$',views.show_books),  #显示图书信息
    url(r'^books/(\d+)$',views.detail), #显示英雄信息
    url(r'create$',views.create),       # 新增数据
    url(r'delete(\d+)$',views.delete),  # 删除数据
]

Django_182_入门指南_第36张图片

网页返回指定的404页面

在项目开发期间,代码未完成,访问路由地址,返回指定的404页面
修改 CTTIC/CTTIC/settings.py 配置

# DEBUG = True
# ALLOWED_HOSTS = []
DEBUG = False
ALLOWED_HOSTS = ['*']  # 星代表允许所有 ip 访问

关闭调试模式之后,默认会显示一个标准的错误页面,如果要显示自定义的页面,需要在 templates 目录下自定义一个 404.html 页面(url没有配置或者配置错误)和500.html 服务器端错误(视图函数出错)
新建 CTTIC/templates/404.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404错误页面title>
head>
<body>
<h1>页面正在开发h1>
{{ request_path }}  
body>
html>

Django_182_入门指南_第37张图片
新建 CTTIC/templates/500.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>500错误title>
head>
<body>
<h1>服务器错误,可能视图函数报错误h1>
body>
html>

用户登录案例

显示登录页面

浏览器 输入 127.0.0.1:8000/login 跳转登录页面
新建 CTTIC/templates/app/login.html
GET表单 : 提交的参数在URL中
POST表单: 提交的参数在请求体中


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面title>
head>
<body>
<form method="post" action="/login_check">
    用户名: <input type="text" name="username"><br/>
    密码: <input type="password" name="password"><br/>
    <input type="submit" value="登录">
form>
body>
html>

添加视图函数 CTTIC/app/views.py

def login(request):
    '''显示登录页面'''
    return render(request,'app/login.html')

配置路由 CTTIC/app/urls.py

#-*- coding:utf-8 -*-
from django.conf.urls import url
from app import views
urlpatterns = [
    url(r'^login$',views.login), #显示登录页面
]

Django_182_入门指南_第38张图片
使用 浏览器 【F12】模拟输入账号和密码,浏览器的变化
Django_182_入门指南_第39张图片
网页中 GET 请求效果

<form method="get" action="/login_check">
form>

在这里插入图片描述

登录校验

配置路由,并编写视图函数 接收提交的表单数据
配置路由 CTTIC/app/urls.py


添加视图函数 CTTIC/app/views.py 接受数据并验证


你可能感兴趣的:(python_Django)