Django简单学习-模型类、表单视图

上一节认识了Django站点的简单建立,但并未涉及到Model层的处理,本篇将设计一个简单模型类以及表单视图

模型类

1.配置项目INSTALLED_APPS

在DTFT_D/settings.py中添加应用Django_app的名字(py2.x中需要填写成Django_app.apps.AppConfig

INSTALLED_APPS = [
    'Django_app',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

2.模型定义

在models.py中新建一个模型类Moment

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

class Moment(models.Model):
    content = models.CharField(max_length=300)
    user_name = models.CharField(max_length=20)
    kind = models.CharField(max_length=20) #单选框

3.生成数据移植文件(将models.py中定义的数据表转换成数据库脚本)

python manage.py makemigrations Django_app

4.移植到数据库(使移植文件生效、修改真实的数据库schema)

python manage.py migrate

注意:可以在每次修改models.py文件后运行makemigrations,检查改动是否符合数据库语法;在调试运行前,运行migrate使改动生效


扫描二维码关注公众号,回复: 2458191 查看本文章

表单视图

1.定义表单类,在DTFT_D/Django_app下新建forms.py,定义表单类MomentForm

# -*- coding: utf-8 -*-
__author__ = 'leeho'
from django.forms import  ModelForm
from Django_app.models import Moment

class MomentForm(ModelForm):
    class Meta:
        model = Moment
        fields = '__all__' #可写成fields=('content','user_name','kind') 将模型类中的字段导入表单类中
2.修改模型类
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
#定义一个元组设置消息类型枚举项(key-value)
KIND_CHOICES = (
    ('Python技术','Python技术'),
    ('数据库','数据库'),
    ('心理学','心理学'),
    ('经济学','经济学'),
    ('其他','其他'),
)

class Moment(models.Model):
    content = models.CharField(max_length=300)
    user_name = models.CharField(max_length=20,default='匿名')
    kind = models.CharField(max_length=20,choices=KIND_CHOICES,default=KIND_CHOICES[0]) #单选框

3.开发模板文件,即HTML/XML,在DTFT_D/Django_app/templates下新建moment_input.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>消息录入界面</title>
</head>
<body>
    <form action="?" method="post">
        <fieldset>
            <legend>请输入并提交</legend>
                {{ form.as_p }} #定义表单类MomentForm的输入字段
                <input type="submit" value="submit"/>
        </fieldset>
    </form>
</body>
</html>

4.开发视图,使表单类和页面模板衔接,编辑Django_app/views.py

import os
from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from Django_app.forms import MomentForm
# Create your views here.

def welcome(request):
    return HttpResponse("<h1>Welcome to my tiny twitter!</h1>")

def moments_input(request):
    if request.method == "POST":
        form = MomentForm(request.POST)
        if form.is_valid():
            moment = form.save()
            moment.save()
            return HttpResponseRedirect(reverse('welcome')) #welcome对应urls中name,reverse类似于通过找welcome再映射视图
    else:
        form = MomentForm()
    PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    return render(request, os.path.join(PROJECT_ROOT, 'Django_app/templates', 'moments_input.html'), {'form':form})

在Django_app/urls.py中添加视图函数的路由映射

urlpatterns=[
    url(r'moments_input',views.moments_input),
    url(r'',views.welcome,name='welcome'),
]

运行截图:


点击submit后跳转到


猜你喜欢

转载自blog.csdn.net/weixin_37224686/article/details/79893196