Python下有许多款不同的 Web 框架,常见的有Django,Flask,Torand,。其中Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django采用了MVC的框架模式,即模型M,视图V和控制器C。
一、准备工作:django和数据库的安装
在创建django项目前,有一些准备工作。1、安装python3.7,并配置到环境变量。2、安装django,在命令行执行以下命令pip install django。3、安装数据库 pip install mysqlclient pip install Pillow
(注意 1、如果出现类似“。。。。。pip install --upgrade pip”的错误,按提示执行以下命令升级pip:pip install --upgrade pip
2、如果pip install mysqlclient出现错误就下载数据库,手动安装执行命令pip install mysqlclient-1.4.4-cp37-cp37m-win_amd64.whl)
二、创建django项目netBarManageSys
以创建一个网吧管理系统为例。
1、打开cmd命令行
2、定位到要创建项目的文件夹
3、执行命令django-admin startproject netBarManageSys
执行完以上三个命令后,可以看到在我们指定的目录位置创建了一个netBarManageSys文件夹
netBarManageSys文件夹下目录结构说明
- netBarManageSys: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- netBarManageSys/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- netBarManageSys/settings.py: 该 Django 项目的设置/配置。
- netBarManageSys/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
- netBarManageSys/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
从命令行进入netBarManageSys路径,启动服务器python manage.py runserver
0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。
在浏览器输入 http://127.0.0.1:8000/,结果如下:
这是一个空的服务器什么内容都没有。我们要完善其View(及网页界面显示)、数据模型Model(即数据结构),以及一些功能逻辑跳转。
三、丰富项目内容
3.1 模型 Model
3.1.1 数据库配置
创建数据库,注意编码格式,进入mysql命令行,执行以下create database netbar_manage_sys_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'netbar_manage_sys_db',
'HOST':'localhost',
'PORT':'3306',
'USER':'root',
'PASSWORD':'root123',
}
}
上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来。
3.1.2 定义数据模型
Django规定,如果要使用模型,必须要创建一个app。使用startapp命令创建一个名为netBarSys 的 app:
目录结构如下
在setting文件中配置我们自己创建的app,这一步很重要,不然后面同步数据库会有问题
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'netBarSys',#我们自己定义的app
]
打开mdels.py文件,添加我们需要的数据模型。
根据功能需要添加用户数据模型和用户信息数据模型
class Users(models.Model):
usertype = models.IntegerField(default=0)#0-顾客,1-管理员
name = models.CharField(max_length=50)
password = models
class UserInfos(models.Model):
user= models.OneToOneField(Users, on_delete=models.CASCADE)
loginintime=models.DateTimeField('login in time')#登录时间
lastLogouttime=models.DateTimeField('last login out time')#上次登出时间
onlinetime=models.IntegerField(default=0)#在线时间单位分钟,当该值超过240,强制下线
state=models.IntegerField(default=0)#顾客状态0-offline normal,1-online normal 2 force off line
fee=models.IntegerField(default=0)#费用
同步数据库,命令行中依次运行
python manage.py makemigrations
python manage.py sqlmigrate netBarSys 0001
python manage.py migrate
创建管理员账户
创建管理员账户,管理员是不能注册的。从命令行进入graduationDesignSys路径,依次执行以下命令
python manage.py shell
>>> from netBarSys.models import Users
>>> admin=Users(usertype=1,name='admin01',password='123456')
>>> admin.save()
3.2模板Templates和视图View
在django中,视图对WEB请求进行回应
视图接收reqeust对象作为第一个参数,包含了请求的信息
视图就是一个Python函数,被定义在views.py中
模板基本上就是一些输出动态值的经过特殊格式化的HTML文本,支持简单的逻辑结构如循环等。当一个视图要返回一个HTML文档时,它通常会指定一个模板,提供给它所要显示的信息,并在响应里使用模板渲染的结果。
在netBarSys目录下创建templates目录,这里面将存放我们的模板文件。定义base文件包含一些通用的显示设置项,其他html文件继承自它。关于html文件内容是另外的内容这里不详细赘述,只截取部分重要代码
登陆文件代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
<!-- 使用CSS样式来控制div布局 -->
<style type="text/css">
/*定义全局的div布局*/
#content{
width: 100%;
height: 800px;
margin:200px auto;
}
html,body{text-align:center}
input,select{height:30px; width:200px; vertical-align:left;}
</style>
</head>
<body>
<div id=content>
<h2>AA网吧管理系统</h2>
<div>
{% for message in messages %}
<div class='alert alert-{{message.tags}}' style="color:coral">{{ message }}</div>
{% endfor %}
</div>
<form action="{% url 'index' %}" method="post" name='login'>{% csrf_token %}
<table align="center">
<tr>
<td>账户:</td>
<td><input type="text" id="id_username" name="username" placeholder="用户名" autofocus required /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="id_password" placeholder="密码" name="password" required /></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="登录" >
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
创建视图函数实现登陆功能
在netBarSys/views.py中
def index(request):
if request.method == 'POST':
name = request.POST['username']
password = request.POST['password']
# 查询用户是否在数据库中
print("%s,%s,%d"%(name,password))
if Users.objects.filter(name=name).exists():
user=Users.objects.get(name=name)
print("%s,%s,%d" % (user.name,user.password,user.usertype))
print(user.password+",%d" % user.usertype)
if user.password==password:
request.session['is_login'] = 'true'
request.session['username'] = 'username',
if user.usertype==1:
response=render(request, 'homepage_a.html')#跳到管理员首页界面
else:
response=render(request, 'homepage.html')#跳到顾客首页界面
#set cookie
response.set_cookie('username', user.name)
return response
else:
messages.add_message(request,messages.ERROR,'用户密码或身份类型错误')
return render(request, 'index.html')
else:
messages.add_message(request,messages.ERROR,'用户不存在')
return render(request, 'index.html')
return render(request, 'index.html')
将新视图添加进lib.urls模块里
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'),
]
显示样式:
输入刚才创建的管理员的账户和密码登陆后如下图:
其他功能用同样的方法(1、创建模板(写html文件),2、实现view函数,3、将新视图添加进lib.urls模块里。)来实现