最近在毕业设计的项目中需要用到Django搭建Python Web的项目。整理一下搭建和使用时遇到的问题,方便下次使用时查阅。
Django是一款支持快速开发,设计整洁务实的高级Python Web框架。它由经验丰富的开发人员构建,可以处理Web开发中的大部分麻烦。因此用户可以专注于编写应用程序,不需要重新造轮子,并且Django是免费开源的。 —— [ Django官网 ]
在Django安装之前,请先确认Python已经安装在本地,Python安装可以参考廖雪峰博客:安装Python
安装Python时,最好同时选择安装pip以方便后续Django的安装。
Django官网安装方式一
进入Python安装目录下的 /Scripts/pip.exe(直接拖动到cmd窗口中也可以)后面加上install Django==2.0.4
即可,成功后会自动下载Django
Django会被安装到 \Python\Lib\site-packages 目录下。
cmd命令行E:\python\Scripts\pip exe install Django==2.0.4
配置系统环境变量path,在路径中添加
E:\python\Scripts
和 E:\python\Lib\site-packages\django
想要检查安装成功与否,可以进入python交互模式下,输入
import Django
Django.get_version()
如果获得Django版本号说明安装正确。
进入E:\python\Scripts可以看到django-admin.py
文件,直接执行可以看到django可使用的命令列表。
执行django-admin.py startproject HelloWorld
(HelloWorld为项目名称),即可获得如下结构的项目。
HelloWorld
|– HelloWorld
| |– __init__.py
| |– settings.py
| |– urls.py
| |– wsgi.py
|– manage.py
- HelloWorld: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站”目录”。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
—— 引用自 runoob:Django创建第一个项目
运行命令Python manage.py runserver
如果出现以下提示
You have unapplied migrations; your app may not work properly until they are applied. Run ‘python manage.py migrate’ to apply them.
先使用命令 python manage.py migrate
输出如下信息即代表成功
Operations to perform: Apply all migrations: contenttypes, sessions, admin, auth
Running migrations: Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying sessions.0001_initial… OK
重新运行命令Python manage.py runserver即可成功,本地访问http://127.0.0.1:8000/(默认)即可。 —— 引用自Andrew Liu的简书
首先在HelloWorld项目下的HelloWorld(主容器)目录下,新建view.py文件,代码内容如下:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world ! ")
其效果可以在页面上输出 Hello world !
这句话。
想要绑定URL,需要修改HelloWorld目录下的urls.py文件,将本来的内容替换为:
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^$', view.hello),
]
导入url包使其可以调用url函数,导入view页面使其可以使用。
其目的在于在 urlpatterns
的配置信息中,加入:当访问 127.0.0.1:8000
(后面没有任何内容)时,会执行 view.py
文件中的 hello
函数。
因此上面的内容也可以替换为:
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^hello$', view.hello),
]
则访问 127.0.0.1:8000\hello
时,执行hello函数。
—— 以上代码引用自 runoob:Django创建第一个项目
在项目中我主要使用的是POST方法,配合ajax访问后台。由于django在安全方面的配置,使用POST方法必须在请求中包含csrf_token防止跨站域请求伪造。如果丢失,会造成访问报500错误。
现在整理两种方法:
1. 借助form表单进行访问
form表单比较简单,只需要在标签中加入{% csrf_token %}
即可,这种方式在表单提交后会自动在请求中加入。
样例:
<form action="/search-post" method="post">
{% csrf_token %}
<input type="text" name="q">
<input type="submit" value="Submit">
form>
# 后端代码
def search_post(request):
ctx = {'rlt': 10000}
print request.POST
if request.POST:
ctx['rlt'] = request.POST['q']
return render(request, "post.html", ctx)
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
然后正常写入ajax请求即可。
$.ajax({
type: "post",
url: "/result",
dataType: "json",
data: {
"param": "I'am param!"
},
success: function(data) {
alert('成功');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('失败');
}
});
def result(request):
cotext = {}
if request.POST:
param = request.POST.get('param')
context["data"] = param
context["status"] = status
return HttpResponse(json.dumps(context), content_type='application/json')