特点:
组成结构:
pythonpip instal django
在进行Django开发之前需要先用django-admin建立django的项目,语法如下:
pythondjango-admin startproject 站点名称 项目生成的路径(可以不加)
# 例如
django-admin startproject djangosite
该命令在当前目录中建立了一个子目录djangosite,并在其中生成了django开发的默认文件,djangosite的目录如下:
djangosite/ manage.py djangosite/ __init__.py settings.py urls.py wsgi.py
对它们的解释如下:
- manage.py 是django用于管理本项目的命令行工具,之后进行站点运行、数据库自动生成、静态文件收集等都要通过该文件完成
- 内层 djangosite/目录 中包好了本项目的实际文件,同时因为其中包含了__init__.py的文件,所以该目录也是一个Python包
- djangosite/init.py 告诉python该目录是一个Python包
- djangosite/settings.py django的项目配置文件,默认时,在其中定义了本项目引用的Django组件、Django项目名等。在之后的开发中,还需在其中配置数据库参数、导入的其他python包的等信息。
- djangosite/urls.py 维护项目的URL路由映射等,即定义客户端访问的URL由哪一个Python模块解释并提供反馈,在默认的情况下,其中只定义了"/admin"即管理员站点的解释器。
- djangosite/wsgi.py 定义WSGI的接口信息,用于与其他Web服务器集成,一般本文件在生成后无须改动
为了在项目中开发符合MVC架构的实际应用程序,我们需要再项目中建立Django应用,每个Django项目可以包含多个Django应用。语法如下:
python# python manage.py startapp 应用名称
python manage.py startapp app
命令完成后会在项目目录中建立如下目录及文件结构:
app/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
对其中的文件功能解析如下:
pythonfrom django.http import HttpResponse
def welcome(request):
return HttpResponse("<h1>Welcome to my tiny twitter!</h1>")
pythonfrom django.conf.urls import url
# 引入app下的views.py的模块
from . import views
urlpatterns=[
url(r'',views.welcome)
]
urlpatterns是一个变量列表,保存所有由url函数生成的路由映射
pythonfrom django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
urlpatterns=[
url(r'^app/', include('app.urls')),
url(r'^admin/', admin.site.urls)
]
解释:
首先通过import 语句引入django.conf.urls.include()函数,之后在urlpatterns列表中添加一个路径app/,将其转接到app.urls的包,即djangosite/app/urls.py文件。这样,通过include函数就将两个urlpatterns连接起来了
pythonpython manage.py runserver 0.0.0.0:8001
用这种方式启动的Web服务器是Django内置的Web服务器,由于性能原因,一般只用于开发人员测试。正式运行的网站应该使用WSGI的方式启动
Model层的处理,即设计和开发信息发布的数据访问层,4个步骤:
pythonINSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app.apps.AppConfig']
pythonfrom django.db import models
class Moment(models.Model):
content = models.CharField(max_length=200)
user_name = models.CharField(max_length=20)
kind = models.CharField(max_length=20)
content为保存消息的内容,user_name为保存发布人的名称、kind保存信息的类型
生成数据移植文件(makemigrations)是指将models.py中定义的数据表转换成数据库生成脚本的过程。
pythonpython manage.py makemigrations app
然后,会在migrations中看到一个.py的文件,若此时更改user_name的最大长度为30,修改完models.py之后,再次生成迁移文件,你就会看到一些明显的字段,说user_name的max_length进行修改了。迁移文件内的代码不用深究
pythonpython manage.py migrate
可以在每次修改models.py文件内容运行makemigrations命令,检查改动是否符合数据库的语法规则;在调试运行之前,运行一次migrate命令使改动生效
设计和开发信息录入页面,该页面的基本功能为提供输入界面,让用户输入名字,文本消息内容、选择消息类型,用户提交后网页自动设置该信息的时间并保存到数据库中
pythonfrom django.forms import ModelForm
from app.models import Moment
class MomentForm(ModelForm):
class Meta:
model=moment
fields='__all__' # 导入所有字段
解释:
pythonfrom __future__ import unicode_literals
from django.db import models
# 新增元组用户设置消息类型 枚举型
KIND_CHOICES=(
('python技术','python技术'),
('数据库技术','数据库技术'),
('经济学','经济学'),
('文体资讯','文体资讯'),
('个人心情','个人心情'),
)
class Moment(models.Model):
content = models.CharField(max_length=200)
user_name = models.CharField(max_length=20,default='匿名')
kind = models.CharField(max_length=20,choices=KIND_CHOICES,default=KIND_CHOICES[0])
其中kind_choices是一个元组,其中('经济学','经济学'),第一个是存储到数据库的,第二个是对应的关系,item.types.code,item.types.value,分别输出第一个,第二个的值
html<!DOCTYPE html>
<html>
<head>
<title>消息录入页面</title>
</head>
<body>
<form action="?" method="post">
<fieldset>
<legend>请输入并提交</legend>
{{form.as_p}}
<!-- 利用form.as_p来定义表单类的输入字段-->
<input type="submit" value="submit">
</fieldset>
</form>
</body>
</html>
pythonimport os
from app.forms import MomentForm
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.shortcuts import render
def moment_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})
在代码中新增视图函数moments_input(),该函数定义了两种访问方式的不同处理
在app/uls.py 文件中增加该文件视图函数的路由映射,内如容下:
pythonurlpatterns=[
url(r'moments_input',views.moments_input),
url(r'',views.welcome)
]
Django管理界面是一种通过简单的配置就可以实现的数据模型后台的Web控制台。管理界面通常是给系统管理员使用的,以完成元数据的输入、删除、查询等工作
首先,将管理界面需要管理的模型类推按家到djangosite/app/admin.py 文件中:
pythonfrom django.contrib import admin
from .models import Moment
admin.site.register(Moment)
在第一次访问管理界面之前,需要通过manage.py工具的createsuperuser命令建立管理员用户
本文作者:Eric
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!