Django入门学习(1)

终于开始学习Django了。豆子的使用环境是 windows 10 + Python 3.5+ Django 1.11。


安装和创建


安装命令 pip install django, 他会自动安装在我的Python目录下的Script目录里

Django入门学习(1)

Django入门学习(1)

根据他的目录位置,添加环境变量,这样才能直接调用



Django入门学习(1)



为了使用Django,我们首先需要创建一个Project,命令如下,他会在当前目录下生成一个项目文件夹。


Django入门学习(1)


如果使用Pycharm, 也可以通过Pycharm新建一个Django Project。他会自动生成一些文件。比较重要的文件有


settings.py  配置文件,比如连接数据库,目录路径等等

urls.py        路有文件,Django是所谓的MTV(Model, Template,View)结构,url通过路径执行view里面对应的函数,然后在函数里面调用template的网页界面

wsgi.py       一个socket的文件,接收用户请求,发送内容

manage.py  管理工具,创建app和数据库等等


Django入门学习(1)


一个大的项目下面可以用很多的子功能,这个子功能叫做App。


下面创建一个叫做CMDB的App


Django入门学习(1)

自动生成了很多文件,其中最重要的是 models.py (访问数据库),view(实现函数)


Django入门学习(1)


至此,一个基本的结构就自动创建好了,下面来看看具体实现



实例


搭建好环境了,现在来看看一些基本的实例。 Django的Web框架使用的是MVC的设计结构,这里他叫做MTV(代表Model,Template和Viewer),其中model用来处理数据库,template处理前端页面,view处理业务逻辑。基本的工作流程是Django开始执行socket监听,获取用户请求, 在url.py通过不同的url调用views.py中对应的函数,然后该函数接收一个Httprequest的参数,返回一个Httpresponse的结果到对应的前端页面,然后socket把结果发回给用户。


例一 假设用户输入 http://127.0.0.1:8000/index/ 返回一个结果 Hello World


Django首先在urls.py根据路由进行选择,如果后缀是index,那么执行 views里面的index函数。

注意他的匹配是通过正则来匹配的, r' 表示原生正则(不解释反斜线),^index表示以index/开头的内容 ,为了精确匹配 我们可以在后面加个$ , ^index/$这样的话 index/abc 之类的就不会匹配进来了


urls.py

1
2
3
4
5
6
7
from django.conf.urls import url
from django.contrib import admin
from cmdb import views
urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
]


第一个例子我们之间硬编码返回一个字符串给用户,这里已经封装了一个方法HttpResponse(), 直接调用即可


views.py

1
2
3
4
5
from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
def index(request):
    return HttpResponse('Hello World')


Django自带了一个轻量级的运行web server,这样对于开发者来说可以直接运行,而不需要额外搭建。但是生产环境中需要使用生产级别的Web server。  


Django自带的Web server 的可以输入命令启动


Django入门学习(1)


也可以通过Pycharm执行

Django入门学习(1)


结果出现了


Django入门学习(1)




当然例1非常简单,硬编码直接返回的字符串;


例2,我们可以例1的基础上稍微加工一下,读取一个Html文件的内容,然后返回给用户。


首先需要创建一个html文件,根据我们的MTV结构,所有的html应该放在templates这个目录下,我们可以创建一个templates目录(如果没有的话),然后在里面创建一个index.html文件

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>This is 2nd Example!</h1>
</body>
</html>



Django本身不知道templates的位置,因此我们需要在setting.py里面指定他的路径 。如果是通过Pycharm创建的项目 那他已经帮你创建好了


Django入门学习(1)




回到先前的views.py文件,修改index函数。 读取html的内容不需要自己open,他已经封装了一个方法render 可以直接获取。render本质是模板的渲染,他把一个context对象的值替换掉template对象的内容,从而我们可以把后台的值传给前端。


1
2
3
4
5
6
from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
def index(request):
    return render(request,'index.html')
    # return HttpResponse('Hello World')


重启一下Django 发现页面已经变化了

Django入门学习(1)



例3 在上面的基础上,我希望获取用户的输入信息


设计一个简单的表单,通过post提交

index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>This is 3rd Example!</h1>
    <form action="/index/" method="post">
        <input type="text" name="user">
        <input type="email" name="email">
        <input type="submit" value="Submit">
    </form>
</body>
</html>


接收请求的时候,只接收post方法的,get的忽略掉,注意get()里面的是html对应标签的名字

views.py

1
2
3
4
5
6
7
8
9
10
from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
def index(request):
    if request.method == 'POST':
        u=request.POST.get('user')
        e=request.POST.get('email')
        print(u,e)
    return render(request,'index.html')
    # return HttpResponse('Hello World')


执行一下看看,会有一个安全方面的csrf的警告


Django入门学习(1)


可以在setting.py里面先注释掉这个安全监测

Django入门学习(1)


最后的执行效果,我输入用户名和邮箱,可以在终端上看见


Django入门学习(1)

Django入门学习(1)



现在后台能够成功获取用户的输入信息了,下一步我们需要处理这些数据之后再把结果返回给用户






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1918847,如需转载请自行联系原作者