摘要:Python作为一门简洁优美且功能强大的语言,越来越受编程人员的喜欢。在工业界和学术界也是非常受欢迎的编程语言。python语言可以跨平台跨应用开发。本系列文章首先介绍Python语言及其可以做什么事情。哪些人群适合学习python和python语法特点。其次介绍了Python进阶,以实际案例演示常用的语句和控制流、表达式、函数、数据结构、标准库等知识点。然后扩展介绍了python第三方库,使读者对python有个全面的理解和认识。最后一节,采用实际案例帮助读者综合运用python知识。 (本文原创,转载必须注明出处.)
Django搞定用户管理系统
Django是什么
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。
Django开发模型
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如图所示:
- 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
- 视图(View),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
- 模板(Template),即业务逻辑层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。
Django的架构
让我们一览 Django 全貌:
- urls.py 网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。
- views.py 处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页。
- models.py 与数据库操作相关,存入或读取数据时用到这个,当然用不到数据库的时候 你可以不使用。
- forms.py 表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,当然你也可以不使用。
- templates 文件夹 views.py 中的函数渲染templates中的Html模板,得到动态内容的网页,当然可以用缓存来提高速度。
- admin.py 后台,可以用很少量的代码就拥有一个强大的后台。
- settings.py Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。
上面的py文件不理解也没有关系,后面会详细介绍。一图胜千言,架构全貌工作机制如图所示:
Django商业网站
Sohu 邮箱 、果壳网 、 豆瓣 、 爱调研 、 易度在线云办公 、 优容网 、 快玩游戏、九九房、贷帮网 、 趣奇网 、知乎、时尚时空 、游嘻板: YxPad webpy、DNSPod 国际版 、下厨房 、 贝太厨房 、 Wopus问答 、 咕咚网 、扇贝网 、站长工具、易度文档管理系统、个人租房、 在线文档查看-易度云查看 、 FIFA310 足球数据分析专家、 搜狐随身看等等。
Django安装配置
前置条件
- 假设读者具备Python、web开发、html、css、js、SQL基础。
- Anaconda(包含pip和python插件)、sublime环境已经安装。其中pip用来在线安装工具包。
- 系统环境:WIN10 64bit
- 开发环境:sublime+Anaconda
- 数据库:Mysql 5.6.17
- 语言:python3.5
- 框架:django1.11
通过“Win+R”键打开运行对话框,输入“pip”查看是否安装成功。如果pip输入报错,则需要自行下载安装即可。如果成功安装如图所示:
在线安装Django
通过“Win+R”键打开运行对话框,输入“pip install django”代码,自动运行结束后。打开Sublime编辑器,点击“F6”切换的编辑环境,输入如下代码查看django是否安装成功。
>>> import django >>> django.VERSION (1, 11, 0, 'final', 1)
创建用户管理项目
创建项目和App
第一步
通过“Win+R”键打开运行对话框,并在电脑的E盘根目录下创建名为UserProject的项目,输入如下创建命名:
django-admin startproject xmjc_analysis命令执行完成,通过Sublime Text3打开菜单“File->Open Folder”选择刚刚创建的UserProject文件夹,如图所示: ![](https://i.imgur.com/h0AgYXf.png) - settings.py 项目的设置文件 - urls.py 总的urls配置文件 - wsgi.py 部署服务器文件 - __ init__.py python包的目录结构必须的,与调用有关 > 第二步 进入UserProject文件夹下创建App名为myuser,执行如下命令,命令成功后如图所示:
django-admin startapp myuser
一个项目可以包含多个App,执行完app创建命令后,打开项目查看如图所示:
- admin.py 后台,可以用很少量的代码就拥有一个强大的后台。
- apps.py 本app项目名称等配置。
- models.py 与数据库操作相关,存入或读取数据时用到这个,当然用不到数据库的时候 你可以不使用。
- tests.py 单元测试文件
- views.py 处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页。
第三步
将新定义名为“myuser”的app添加到UserProject项目中。修改UserProject/UserProject/settings.py代码如下:
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 添加新建app 'myuser', ]
到此,完成项目的创建和app的添加。是不是很简单,下面我们创建一个新的欢迎界面。
第一个欢迎页面
1 在myuser文件夹下,打开UserProject/myuser/views.py文件,修改里面的代码如下:
''' 第一个页面 author:白宁超 site:http://www.cnblogs.com/baiboy/ ''' #coding:utf-8 from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse(u"欢迎进入第一个Django页面!")
第一行是声明编码为utf-8, 因为我们在代码中用到了中文,如果不声明就报错.
第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。
我们定义了一个index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容。
2 我们打开UserProject/UserProject/urls.py 这个文件, 修改其中的代码
from django.conf.urls import url from django.contrib import admin # 导入myuser下的视图文件 from myuser import views as myuser_views urlpatterns = [ # 第一个欢迎界面的配置 url(r'^index/$', myuser_views.index,name='index'), url(r'^admin/', admin.site.urls), ]
3 在UserProject目录下输入“python manage.py runserver”命令本地运行服务器,如图所示:
4 将上图的本地网址复制到浏览器访问,本地网址后面输入刚刚配置的方法名“index”即可访问我们刚刚设计的网页。如图所示:
带参数的欢迎页面
- 打开UserProject/myuser/views.py文件,修改里面的代码如下:
‘’’coding:utf-8
from django.shortcuts import render
from django.http import HttpResponse
访问第一个页面
def index(request):
return HttpResponse(u”欢迎进入第一个Django页面!”)
访问第一个带参数的页面
def indexPara(request):
name = request.GET[‘name’]
return HttpResponse(u”欢迎进入\t”+name+”,第一个Django页面!”)
</pre>
- 我们打开UserProject/UserProject/urls.py 这个文件, 修改其中的代码
from django.conf.urls import url
from django.contrib import admin
导入myuser下的视图文件
from myuser import views as myuser_views
urlpatterns = [
# 带参数的欢迎界面的配置
url(r'^para/$', myuser_views.indexPara,name='para'),
# 第一个欢迎界面的配置
url(r'^index/$', myuser_views.index,name='index'),
url(r'^admin/', admin.site.urls),
]
</pre>
- 如果服务器关闭,需要如上方法重新打开。反之,直接输入网址查看,如图所示:
单数据库配置
- 在UserProject/UserProject/settings.py文件下,默认sqlites数据库,现在假设项目需求是mysql数据库。具体修改如下:
# Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { # 配置默认为mysql数据库 'default': { 'ENGINE': 'django.db.backends.mysql', # 设置数据库引擎 'NAME': 'test', # 数据库名 'USER': 'test', # 数据库登陆名 'PASSWORD': 'test123', # 数据库登陆密码 'HOST':'localhost', # 数据库服务器IP,默认设置本地 'PORT':'3306', # 端口号 }, # 默认配置为sqlite3数据库 # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } }
UserProject/UserProject/ init.py文件添加如下代码:
import pymysql pymysql.install_as_MySQLdb()
- 在UserProject/myuser/models.py下设计数据库表,采用ORM方式,完整代码如下:
from django.db import models
Create your models here.
class User(models.Model):
username = models.CharField(‘用户名’, max_length=30)
userpass = models.CharField(‘密码’,max_length=30)
useremail = models.EmailField(‘邮箱’,max_length=30)
usertype = models.CharField(‘用户类型’,max_length=30)
def __str__(self):
return self.username
</pre>
- 在analysis/admin.py中定义显示数据
from django.contrib import admin from .models import User class UserAdmin(admin.ModelAdmin): list_display = ('username','userpass','useremail') # 自定义显示字段 admin.site.register(User,UserAdmin)
- 打开对话框,在“UserProject”下将生成的py文件应用到mysql数据库。输入如下命令:
python manage.py makemigrations python manage.py migrate
- 创建超级管理员:用户名,admin1;密码密码:admin123,如图所示
python manage.py createsuperuser
创建后台超级管理员
创建后台超级管理员
- 登录后台查看信息
可以看到后台信息,并对数据表进行增删改查操作,但是后台全部英文如图示,可以改为中文显示?
后台管理设置为中文显示,UserProject/UserProject/settings.py下修改代码:
LANGUAGE_CODE = 'zh-Hans' # 中文显示再去查看: ![](https://i.imgur.com/yCz4Atj.png) *** # Django数据库操作 ## QuerySet API,shell玩转MySql 在UserProject项目下输入【 python manage.py shell】,然后查询数据表如图所示: ![](https://i.imgur.com/MwMAay7.png) 创建一条用户信息,输入如下shell命令:
User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")登录项目后台查看,如图所示。
![](https://i.imgur.com/tDHK2vF.png)
其他shell操作语句
# 方法 1 User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员") # 方法 2 twz =User(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员") twz.save() # 获取对象: Person.objects.all() # 满足条件查询 User.objects.filter(username="李白") # 迭代查询: es = Entry.objects.all() for e in es: print(e.headline) # 查询排序: User.objects.all().order_by('username') # 链式查询: User.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com") # 去重查询: qs = qs.distinct() # 删除操作: User.objects.all().delete() # 更新操作: Person.objects.filter(name__contains="abc").update(name='xxx') # 数据的导出: python manage.py dumpdata [appname] > appname_data.json python manage.py dumpdata blog > blog_dump.json # 导出用户数据 python manage.py dumpdata auth > auth.json # 导出用户数据
批量向数据表导入数据
将name.txt导入数据库,数据内容如下:
张一|admin|zhang1@qq.com|超级管理员
张二|admin|zhang2@qq.com|超级管理员
张三|admin|zhang3@qq.com|超级管理员
张四|admin|zhang4@qq.com|超级管理员
张五|admin|zhang5@qq.com|超级管理员
张六|admin|zhang6@qq.com|超级管理员
张七|admin|zhang7@qq.com|超级管理员
张八|admin|zhang8@qq.com|超级管理员
张九|admin|zhang9@qq.com|超级管理员
- 文本数据批量导入mysql数据库中,核心源码如下:
def main(): from analysis.models import User f = open('./readme/files/name.txt',encoding='utf-8') for line in f: name,pwd,email,type = line.split('|') User.objects.create(username=name,userpass=pwd,useremail=email,usertype=type) f.close()
重新登录“用户信息管理后台”,查看结果如图所示:
参考文献
- Python官网
- 中文维基百科
- GitHub
- 图书:《机器学习实战》
- 图书:《自然语言处理理论与实战》
完整代码下载
作者声明
本文版权归作者所有,旨在技术交流使用。未经作者同意禁止转载,转载后需在文章页面明显位置给出原文连接,否则相关责任自行承担。