Python--(1)Django入门_简单的项目创建及运行

python 2.7
Django 1.9.2

安装Django

pip install Django==1.9.2

django-admin

django-admin 是安装好Django组件后在当前目录中生成 Django项目 的管理工具

创建项目

django-admin startproject 项目名称

建立一个名叫 djangosite 的开发项目

django-admin startproject jdangosite

默认生成文件如下:
在这里插入图片描述在这里插入图片描述

文件名描述
manage.py是Django用于管理本项目的命令行工具,之后进行站点运行、数据库自动生成、静态文件收集等都要通过该文件完成
djangosite目录包含了本项目的实际文件,同时因为其中包含__init__.py文件,所以该目录也是一个Python包
_init_.py告诉python该目录是一个Python包
settings.pyDjango的项目配置文件。
默认时,在其中定义了该项目引用的Django组件、Django项目名等。在之后的开发中,还需要在其中配置数据库参数、导入的其他python包等信息
urls.py维护项目URL路由映射,即定义客户端访问的URL由哪一个Python模块解释并提供反馈。
在默认情况下,其中只定义了"/admin"即管理员站点的解释器
wsgi.py定义WSGI的接口信息,用于与其他Web服务器集成,一般本文件在生成后无须改动

建立应用

python manage.py startapp 应用名称
进入项目文件目录

python manage.py startapp app

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

文件名描述
__init__.py该文件的存在使得app成为一个python包
admin.py管理站点模型的声明文件,默认为空
apps.py应用信息定义文件。
在其中生成了类AppConfig,该类用于定义应用名等Meta数据
migrations包用于在之后定义引用迁移功能
models.py添加模型层数据类的文件
test.py测试代码文件
views.py定义URL响应映射

app/views.py

from django.http import HttpResponse

# Create your views here.
# 建立一个路由响应函数
# 返回一条被HttpResponse()封装的Welcome信息
def welcome(request):
    return HttpResponse("<h1>Welcome to my tiny twitter</h1>")

app/urls.py 没有新建

from django.conf.urls import url  # url函数,Django的所有路由映射由该函数生成
from . import views

# 该列表保存所有由url()函数生成的路由映射
urlpatterns = [
        url(r'',views.welcome),
]

djangosite/urls.py

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include #新增,声明对应用app中urls.py文件的引用

urlpatterns = [
    url(r'^app/',include('app.urls')), #第一个参数用正则表达式来表达URL路由,^app/ 表示所有以app开头的路由
    url(r'^admin/', admin.site.urls),
]

运行访问

python manage.py runserver 127.0.0.1:8001

在这里插入图片描述
补充
如果运行python manage.py runserver 0.0.0.0:8000,Django会以为是公网来访问它,而实际上我是在本地访问,所以会访问失败!

模型类

配置项目 INSTALLED_APPS

要在 djangosite/settings.py 中告诉 Django 需要安装应用app中的模型

INSTALLED_APPS = [
    'app.apps.AppConfig',   #新增,声明的是djangosite/app/apps.py中自动生成的AppConfig类    
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

模型定义

app/models.py 中新建模型类 Moment 用来定义信息发布表

# -*- coding: utf-8 -*-
#新建模型类 Moment 用来定义信息发布表
from __future__ import unicode_literals
from django.db import model
# Create your models here.
# 定义子类
class Moment(models.Model):
    content = models.CharField(max_length = 300)        #保存消息的内容
    user_name = models.CharField(max_length = 20)       #保存发布人的名字
    kind = models.CharField(max_length = 20)            #保存消息的类型

生成数据移值文件(makemigrations)

所谓生成数据移值文件(makemigrations),是指将 app/models.py 中定义的数据表转换成数据库生成脚本的过程,该过程通过命工具 manage.py 完成
终端:

python manage.py makemigrations app

在这里插入图片描述
输出 app/migrations/0001_initial.py 文件,
是数据库生成的中间文件,通过它也可以知道当前的数据库版本

makemigrations 的过程中,Django会对比 app/models.py 中的模型与已有数据库之间的差异,如果没有差异则不会做任何工作,执行结果如下:
在这里插入图片描述
如果 app/models.py 中文件内容修改了,则在下一次 makemigrations 的时候将会将修改的内容同步到数据库中
比如:将 app/models.py 中Moment 类的字段从长度200修改为300后,再次执行
在这里插入图片描述
输出 app/migrations/0002_auto_20190801_1431.py 文件
在这里插入图片描述

移值到数据库

使用 manage.pymigrate 命令,使makemigrations 生成的中间移值文件生效、修改真实的数据库,进行同步

python manage.py migrate

在这里插入图片描述

表单视图

定义表单视图

app/forms.py 中定义表单类

# -*- coding: utf-8 -*
from django.forms import ModelForm  #该类是所有Django表单类的基类
from app.models import Moment   #引入本项目 app/models.py 中 Moment类,以便后续的表单类中关联 此类
class MomentForm(ModelForm):    #定义表单类
    class Meta:                 #定义子类 Meta
        #声明与本表单关联的模型类及其字段
        model = Moment         
        fields = '__all__'    #将所有模型类中的字段导入表单类中

修改模型类

修改 app/models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# 新增元祖用于设置消息类型枚举项
KIND_CHOICES = (
        ('Python技术','Python技术'),
        ('数据库技术','数据库技术'),
        ('经济学','经济学'),
        ('文体资讯','文体资讯'),
        ('个人心情','个人心情'),
        ('其他','其他'),
)
# Create your models here.

#新建模型类 Moment 用来定义信息发布表
class Moment(models.Model):
    content = models.CharField(max_length = 300)        #保存消息的内容
    user_name = models.CharField(max_length = 20,default = '匿名')       #保存发布人的名字
    kind = models.CharField(max_length = 2, choices = KIND_CHOICES,default = KIND_CHOICES[0])     #保存消息的类

因为 Models 进行了修改,需要重新更新数据库定义,命令如下:

python manage.py makemigrations app
python manage.py migrate

在这里插入图片描述
输出 app/migrations/0003_auto_20190801_1643.py
在这里插入图片描述

开发模板文件

新建 app/templates 目录
新建 app/templates/moments_input.html

<!DOCTYPE html>
<html>
    <head>
        <title>消息录入页面</title>
    </head>
    <body>
        <form action="?" method="post">
            <fieldset>
                <legend>请输入并提交</legend>
                        {{ form.as_p }}
                        <input type="submit" value="submit" />
            </fieldset>
        </form>
    </body>
</html>

开发视图

app/views.py

# -*- coding: utf-8 -*-
import os
from django.http import HttpResponse
from app.forms import MomentForm
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.shortcuts import render

# 建立一个路由响应函数
# 返回一条被HttpResponse()封装的Welcome信息
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("app.views.welcome"))
    else:
        form = MomentForm()
    PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    return render(
        request,
        os.path.join(PROJECT_ROOT, 'app/templates', 'moments_input.html'),
        {'form': form}  # 将form作为参数传给模板,这样在模板文件中才能访问该 MomentForm 的实例
        )

如果是用户的Post表单提交,则保存moment对象,并重定向到欢迎页面
如果是普通访问,则返回 moments_input.html 模板渲染结果作为 HTTP Response.

增加视图函数的映射路径

app/urls.py 中增加视图函数的映射路径

# 该列表保存所有由url()函数生成的路由映射
urlpatterns = [
        url(r'moments_input',views.moments_input),  #新增
        url(r'',views.welcome),
]

运行并访问

python manage.py runserver 127.0.0.1:8001

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值