创建工程可以使用命令: django-admin startproject 工程名称
当然也可以使用 ide 直接创建一个 Django 工程
新建的工程可以直接运行 python manage.py runserver 来开启
Django 同样是 MVT 模式, 需要模型, 路由视图和模板
建好工程后如要新建一个子模块应用, 可以使用命令: python manage.py startapp 子应用名称
同样子应用的相关文件已经自动建好, 但是需要手动添加一个 urls.py 文件用来写入路由
创建好子应用后同样应该和 Flask 一样注册到主模块中去, 这里将子应用下的 apps.py 里的 UserConfig 添加到主模块的 settings.py 里的 INSTALLED_APPS 列表里
配置好后即可开始写路由和视图函数, 这里视图函数在 views.py 内写入, 需要注意的是该框架视图函数均需传入 request 对象:
- from django.http import HttpResponse
- def index(request):
- #这里的 request 对象为框架自动构造, 但是 response 则需开发者构造
- return HttpResponse("hello the world!")
然后在 urls.py 文件内写入路由, 路由文件内是一个名为 urlpatterns 的列表, 这里和 Flask 不同, 不使用装饰器, 而是将所有路由放入一个单独的文件中:
- from django.conf.urls import url
- from . import views
- #这里同样需要将视图函数导入
- urlpatterns = [
- #这个匹配到的路径对应该视图函数
- url(r'^index/$', views.index),
- ]
同时这里的路由也要注册到主模块的路由中, 在主模块的 urls.py 文件的 urlpatterns 列表中写入路由:
- from django.conf.urls import url, include
- from django.contrib import admin
- urlpatterns = [
- url(r'^admin/', admin.site.urls), # django 默认包含的
- # 添加子模块的路由, 这里将包含子模块中的所有路由, 所以该 user 模块的访问路径为协议:// 域名: 端口 / user / 子模块下的具体地址, 拿到 url 后首先匹配路径 user/(这里自动忽略第一个 /), 匹配到后根据 include 找到子模块的 urls, 再根据子模块的路由去执行对应的视图函数, 这也决定了 user 模块下的所有路由均以 / user / 开头, 所以这里要访问 index 的完整路径为 / user/index
- url(r'^user/', include('user.urls')),
- ]
配置文件 settings.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_file_))) 定位当前工程的根目录
DEBUG
语言: LANGUAGE_CODE = 'en-us' 这里可以改为中国中文: LANGUAGE_CODE = 'zh-hans'
时区: TIME_ZONE = 'UTC' 这里同样可以更改: TIME_ZONE = 'Asia/Shanghai'
请求路径及 request 携带参数提取:
请求路径直接携带: 如: http://xxxx:80/news/100 http://xxxx/news/100 可以在路由中使用正则提取: url(r'^news/\d{3}/$', views.news), 此时再定义视图函数时则需要接收 request 对象和该匹配值, 该值也可以取个名字: url(r'^news/?P\d{3}/$', views.news) 将? P < 名字 > 放在前面即可
获取请求路径中的查询字符串参数, 如: http://xxxx:80/news/?id=100 http://xxxx/news/?id=100 这里直接使用 request.GET.get('id') 获取
获取请求体中携带的表单参数, 可以使用 request.POST.get('id') 获取
获取请求体中非表单类型参数, 如 JSON, 使用 request.body 获取, 但是返回值为 byte 类型, 需要转换, 如 JSON: JSON.loads(request.body.decode()).get(id)
获取请求头的各种数据: 如: request.META['CONTENT_TYPE']
来源: http://www.bubuko.com/infodetail-2980942.html