Web框架之Django

众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。socket实现Web通信的本质参考这里

对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。

Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

Django基本配置:

一.安装:

windows终端:pip install django

PyCharm解释器可以CTRL+ALT+S呼出设置界面选择安装。

安装成功后在python配置好环境变量的情况下创建django目录:

  • 命令:
    # 创建Django程序
    django-admin startproject mysite
    # 进入程序目录
    cd mysite
    # 启动socket服务端,等待用户发送请求
    python manage.py runserver 127.0.0.1:8080

PyCharm在左上角File选项New Project选择Django即可,需要启动时运行django目录下的 manage.py模块。

二.Django配置:(假定新建的主目录为mysite)

 1 复制代码
 2  1     
 3  2         Django程序目录:
 4  3             mysite
 5  4                 mysite
 6  5                     - settings.py  # Django配置文件
 7  6                     - url.py       # 路由系统:url->函数
 8  7                     - wsgi.py      # 用于定义Django用socket, wsgiref,uwsgi
 9  8             
10  9                 # 对当前Django程序所有操作可以基于 python manage.py runserver
11 10                 manage.py 
12 11     
13 12     
14 13         1. 创建project
15 14         2. 配置:
16 15                 - 模板路径(html文件等)
17 16                     template目录
18 17                     
19 18                     TEMPLATES = [
20 19                         {
21 20                             'BACKEND': 'django.template.backends.django.DjangoTemplates',
22 21                             'DIRS': [os.path.join(BASE_DIR, 'template')],
23 22                             'APP_DIRS': True,
24 23                             'OPTIONS': {
25 24                                 'context_processors': [
26 25                                     'django.template.context_processors.debug',
27 26                                     'django.template.context_processors.request',
28 27                                     'django.contrib.auth.context_processors.auth',
29 28                                     'django.contrib.messages.context_processors.messages',
30 29                                 ],
31 30                             },
32 31                         },
33 32                     ]
34 33                 - 静态文件路径 (对html文件渲染的css,image文件等)
35 34                     static目录
36 35                     
37 36                     STATIC_URL = '/static/'
38 37                     STATICFILES_DIRS = (
39 38                         os.path.join(BASE_DIR,'static'),
40 39                     )
41 40 
42 41         3. 额外配置(settings.py模块)
43 42             MIDDLEWARE = [
44 43                 'django.middleware.security.SecurityMiddleware',
45 44                 'django.contrib.sessions.middleware.SessionMiddleware',
46 45                 'django.middleware.common.CommonMiddleware',
47 46                 #'django.middleware.csrf.CsrfViewMiddleware',  (POST提交需注释掉)
48 47                 'django.contrib.auth.middleware.AuthenticationMiddleware',
49 48                 'django.contrib.messages.middleware.MessageMiddleware',
50 49                 'django.middleware.clickjacking.XFrameOptionsMiddleware',
51 50             ]
View Code

三:基于django实现简单的页面。

首先切换到mysite目录下的urls.py文件,在文件最下可以看到有如下代码:

 1 urlpatterns = [ url(r'^admin/', admin.site.urls), ] 

这里的url即我们平时看到的比如: http://www.cnblogs.com/mitsui  中的mitsui。它规定了客户端请求的url是^ /中的值,对应的执行后面的函数,如代码中的admin,即执行后面的admin.site,urls函数。明白了这点,我们就可以自定义一个简单的类似网页的子网站的功能。此时我们将它默认的值先注释掉,加入我们需要渲染的网页url:

1 urlpatterns = [
2     # url(r'^admin/', admin.site.urls),
3     url(r'^login/', login),
4 ]

即,当我们启动了django下的socket服务,在浏览器中输入"127.0.0.1:8000/login" 将会执行这里的login函数,在浏览器中看到对应的网页。

此时,我们可以在当前py文件中定义一个遵循Django规则的简单登录界面。

 1 from django.shortcuts import HttpResponse,render,redirect
 2 #导入所需的各个模块
 3 
 4 def login(request):  #request为客户端发送的请求头
 5     if request.method == "GET": #如请求头经解析请求方式为'get'
 6         return render(request,'login.html')  #向客户端发送我们创建的html文件,render模块可以发送文件
 7     else: #请求方式为其它(POST表单提交)
 8         u = request.POST.get('user')  #u,p为自定义的input输入框接收值
 9         p = request.POST.get('pwd')
10         if u =='root' and p == '123':  #模拟帐号密码匹配成功
11             #登录成功
12             return redirect('http://www.baidu.com')
13         #模拟登录成功的跳转,跳转需要导入redirect模块
14         else:
15             #登录失败
16             return render(request,'login.html',{'msg':'用户名或密码错误'})    
17 #匹配失败,返回原网页,并提示错误。将占位符msg改成后面的值。
Python代码
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <link rel="stylesheet" href="/static/login.css">
 7 {#    插入的css路径需放在static目录下#}
 8 
 9 </head>
10 <body>
11 <h1>用户登录</h1>
12 <form method="POST" action="/login/">
13 {#    以POST方式提交,当提交表单时执行对应的函数。#}
14     <input type="text" name="user"> <br>
15     <input type="password" name="pwd"> <br>
16     <input type="submit" value="登录"><br>
17     {{msg}}         {#  Django特殊式占位符,当get提交时不显示,在Django代码下可以{'msg':'xxxx'}xxxx代替这里的msg显示出来 #}
18 </form>
19 </body>
20 </html>
HTML代码

 CSS代码,这里只是测试是否成功引入css,只做了简单的渲染:

 h1{ color: red; } 

现在说各部分代码存放目录。在上面已经有提到:模版文件需放在template目录下,即login.html放在此,这是Django的默认设置,如需要也可以在settings.py下自行更改:

静态文件如此时用到的CSS文件,放在static目录下,也可以在settings.py下更改:

这里的STATICFILES_DIRS即文件真实目录,箭头处可自行更改。无论改成什么名称,html中引入CSS中的href首个目录名还是static,即STATIC_URL对应的值,当然这个值也同样可以更改。

好了,此时启动django服务端,全部工作已经完成,可以打开浏览器试试效果了!

终端:切换到新建的项目目录下:python manage.py runserver 127.0.0.1:8000

PyCharm:我这里项目名为mydj.

 初始界面:

 

账户密码匹配错误:

正确时:成功跳转到百度。

原文地址:https://www.cnblogs.com/mitsui/p/7009599.html