一. python下Django框架基本概念
1. 检查python的环境变量配置
....../pythonXXX
...../pythonxxxx/Scripts
2. 官方网址
https://www.djangoproject.com/
3. 安装
控制台使用 pip install Django进行安装
pycharm 中的settings 中进行安装
二. 创建Djangao框架项目
1使用模板
2对项目进行修改
在settings.py的文件中,添加 import os
3通过开发服务器
python manage.py runserver
三. Django项目的目录结构
参考文档:https://docs.djangoproject.com/en/3.1/intro/tutorial01/
注意:一个项目中,可以有多个应用
1.建立应用 :python manage.py startapp 应用名
2.建立view视图
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
#创建视图 request请求 response相应
from .models import Users
def hello(request):
return HttpResponse("hello world")
3.给视图进行url地址映射
A首先在应用中新建一个urls.py的文件
B在此文件中进入django.urls.path模块
from django.urls import path
C添加映射参数 urlpatterns=[]
D进入当前路径下的views.py模块
from.import views
E利用path函数,进行映射
path(“地址”,views.函数),
from django.urls import path
from . import views
urlpatterns=[
path("hello/",views.hello),
path("all/",views.findAll),
path("find/",views.find),
path("add/",views.add),
path("up/<int:id>",views.update),
path("del/<int:id>",views.delete),
]
四. Django项目中操作数据库
1.关联mysql
默认操作是sqlite的数据
在setting文件中,配置数据库的链接参数
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'student',
'USER': 'root',
'PASSWORD': '591670',
'HOST': 'localhost',
'POST': '3306'
}
}
在__init__.py文件中进行模块的设置
import pymysql
pymysql.install_as_MySQLdb()
2. 操作数据
2.1建立数据库表的模型
在models.py文件中,建立和表结构对应的class
class Users(models.Model):
id=models.IntegerField(primary_key=True)
uname=models.CharField(max_length=255)
upass=models.CharField(max_length=255)
在settings中对子应用模型注册
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'usermng',
'stumng',
]
将模型和数据库进行关联
在Terminal界面下:
python manage.py migrate
2.2对表格进行查询操作
A查询全部
在views.py中建立查询的函数
def findAll(request):
rs=Users.objects.all() #集合
print(rs)
arr=[]
for i in rs: #i相当于每一行
content={'id':i.id,'uname':i.uname,'upass':i.upass}
arr.append(content)
return HttpResponse(arr)
在urls.py中给此函数进行映射
from django.urls import path
from . import views
urlpatterns=[
path("hello/",views.hello),
path("all/",views.findAll),]
注意 数据库表的名字应该是应用名_模块名 的形式,否则报错
B条件查询
在views.py中建立查询的函数
def find(request):
rs= Users.objects.filter(uname='aa')
print(rs)
arr = []
for i in rs: # i相当于每一行
content = {'id': i.id, 'uname': i.uname, 'upass': i.upass}
arr.append(content)
return HttpResponse(arr)
在urls.py中给此函数进行映射
from django.urls import path
from . import views
urlpatterns=[
path("find/",views.find),
]
注意 数据库表的名字应该是应用名_模块名 的形式,否则报错
C添加
def add(request):
user=Users()
user.uname="456"
user.upass="456"
user.save()
return HttpResponse("ok")
#路径映射
from django.urls import path
from . import views
urlpatterns=[
path("hello/",views.hello),
path("all/",views.findAll),
path("find/",views.find),
path("add/",views.add),
path("up/<int:id>",views.update),
path("del/<int:id>",views.delete),
]
D修改
def update(request,id):
user=Users.objects.get(id=id)
user.upass='111'
user.save()
return HttpResponse("okk")
建立映射 path("up/<int:id>",views.update),
E删除
def delete(request,id):
user = Users.objects.get(id=id)
user.delete()
return HttpResponse("okk")
建立映射 path("del/<int:id>",views.delete),
一。模板语言
将Python嵌入HTML
-
变量 {{}}
语法: {{变量}}
作用:在指定位置显示变量中的数据
-
过滤器 |
语法:{{变量|YYY|ZZZ}}
作用:进行筛选并操作
例如:{{name|lower}} 将文本转成小写
{{list|join:“,”}} 使用逗号连接列表元素
{{bio|truancatewords:30}} 显示bio变量的前30个词
| 常用过滤器 | 说明 | 例 |
| default |
空或False时提供默认值 |
{{value|default:"空"}} |
| length |
返回长度 |
{{value|length}} |
| filesizeformat |
文件大小格式化 |
{{value|filesizeformat}} |
-
标签
语法: {% 开始 标签 %} {% 结束标签 %}
作用:完成指定功能
| 开始 标签 | 结束标签 | 说明 |
| {% for 变量 in 集合%} |
{% endfor %} |
循环 |
| {% if 变量 %}{% elif 变量 %}{% else %} |
{% end if %} |
条件 |
| {% extends "页面名.html" %} |
|
继承模板 |
| {% block 名%} |
{% endblock%} |
留出子模板填充内容的位置 |
二。学生管理系统的实例 (用户管理)
-
添加用户的功能
![img]()
![img]()
![img]()
![img]()
2.查询全部信息
建立infos.html页面
|
{#<!DOCTYPE html>#} {#<html lang="en">#} {#<head>#} {# <meta charset="UTF-8">#} {# <title>Title</title>#} {#</head>#} {#<body>#} {% extends "base2.html" %} {% block right%}
<form action="../find/" method="post" name="frmsearch"> {% csrf_token %}
<p><label>用户名:</label><input type="text" name="kd"> <input type="submit" value="查找"> </p> </form>
<table border="1"> <tr> <th>序号</th> <th>用户名</th> <th>密码</th> <th>操作</th> </tr> {% for item in uList %}
<tr> <td>{{ item.id }}</td> <td>{{ item.uname }}</td> <td>{{ item.upass }}</td> <td> <a href="../showup/{{ item.id }}">修改</a> <a href="../del/{{ item.id }}">删除</a> </td>
</tr> {% endfor %}
</table> <a href="../showAdd/">添加用户</a>
{% endblock %} {#</body>#} {#</html>#} {% block left %} <ul> <li><a href="../showAdd/">添加用户</a></li> <li><a href="../all/">查看用户</a></li> <li><a href="../index/">首页</a> </li> </ul>
{% endblock %}
|
修改msg.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>{{ msg }}</h2> <h3><a href="../all/">查看信息</a> </h3> </body> </html>
|
修改views中的代码
def findAll(request): rs=Users.objects.all() #jihe arr=[] for i in rs: #i相当于每一行 content={'id':i.id,'uname':i.uname,'upass':i.upass} arr.append(content) context={'uList':arr} return render(request,"infos.html",context)
|
urls.py代码
from django.urls import path from . import views urlpatterns=[ path("all/",views.findAll), path("find/",views.find), path("add/",views.add), path("up/",views.update), path("del/<int:id>",views.delete), path("showAdd/",views.showAddUserPage), path("showup/<int:id>",views.showUp), path("t1/",views.t1), path("index/",views.index) ]
|
条件查询:
.filter(列名_key="值") 或者 .fiter(**字典)
_key:
不添加任何的key,列名=值 精确查找
列名_contains:包含,模糊查询
列名_in:符合其中之一就可以,例如 :age_in=[3,6,9]
列名_range:在一个范围 例如 score_range=(90,100)
列名_gt:大于 gte: 大于或等于 It 小于 Ite 小于或等于
starswith 开头是 endswith 结尾是
def find(request): if request=="GET": keywords=request.GET.get("kd") else: keywords=request.POST.get("kd")
rs= Users.objects.filter(uname__contains=keywords) arr = [] for i in rs: # i相当于每一行 content = {'id': i.id, 'uname': i.uname, 'upass': i.upass} arr.append(content) context = {'uList': arr} return render(request, "infos.html", context)
|
删除信息:
def delete(request,id): user = Users.objects.get(id=id) user.delete() return HttpResponseRedirect("../all/")
|
<a href="../showup/{{ item.id }}">修改</a> <a href="../del/{{ item.id }}">删除</a>
|
更改信息:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="../up/" method="post" name="frmAddUser"> {% csrf_token %} <input type="hidden" name="id" value="{{ one.id }}"> <p> <label>uname: </label><input type="text" name="uname" value="{{ one.uname }}" readonly> </p> <p> <label>upass: </label><input type="password" name="upass"> </p> <p> <input type="submit" value="修改"> <a href="../all/">返回</a> </p>
</form> </body> </html>
|
def showUp(request,id): i= Users.objects.get(id=id) temp={'id': i.id, 'uname': i.uname, 'upass': i.upass} context={'one':temp} return render(request,"up.html",context)
def update(request): if request.method=="POST": sid=request.POST.get('id') upass=request.POST.get('upass') user=Users.objects.get(id=sid) user.upass=upass user.save() context = {'msg': "修改成功"} return render(request, 'msg.html', context)
|
from django.urls import path from . import views urlpatterns=[ path("all/",views.findAll), path("find/",views.find), path("add/",views.add), path("up/",views.update), path("del/<int:id>",views.delete), path("showAdd/",views.showAddUserPage), path("showup/<int:id>",views.showUp), path("t1/",views.t1), path("index/",views.index) ]
|
|
python中模板继承:
模板页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ width: 900px; margin: 0px auto; } #top{ height: 100px; background-color: antiquewhite;
} #left{ width: 20%; background-color: antiquewhite; float: left; height: 400px; } #right{ width: 80%; background-color: antiquewhite; float: left; height: 400px; }
</style> </head> <body> <div id="top"> <h2>学生管理系统</h2> </div> <div id="left"> {% block left %} <ul> <li><a href="http://127.0.0.1:8000/stumng/all/">学生管理</a> </li> <li><a href="http://127.0.0.1:8000/usermng/all/">用户管理</a> </li> </ul> {% endblock %} </div> <div id="right"> {% block right %} <h1>欢迎使用学生管理系统</h1> {% endblock %} </div>
</body> </html>
|
子模版页
{% extends "base2.html" %} {% block right%}
<form action="../find/" method="post" name="frmsearch"> {% csrf_token %}
<p><label>用户名:</label><input type="text" name="kd"> <input type="submit" value="查找"> </p> </form>
<table border="1"> <tr> <th>序号</th> <th>用户名</th> <th>密码</th> <th>操作</th> </tr> {% for item in uList %}
<tr> <td>{{ item.id }}</td> <td>{{ item.uname }}</td> <td>{{ item.upass }}</td> <td> <a href="../showup/{{ item.id }}">修改</a> <a href="../del/{{ item.id }}">删除</a> </td>
</tr> {% endfor %}
</table> <a href="../showAdd/">添加用户</a>
{% endblock %} {#</body>#} {#</html>#} {% block left %} <ul> <li><a href="../showAdd/">添加用户</a></li> <li><a href="../all/">查看用户</a></li> <li><a href="../index/">首页</a> </li> </ul>
{% endblock %}
|
最终版
views
from django.shortcuts import render
# Create your views here. from django.http import HttpResponseRedirect,HttpResponse #创建视图 request请求 response相应 from .models import Users #显示前台页面 def showAddUserPage(request): return render(request,"adduser.html")
def add(request): user=Users() if request.method=='POST': user.uname=request.POST.get("uname")#和models数据库名一样 user.upass= request.POST.get("upass") else: user.uname = request.GET.get("uname") # 和models数据库名一样 user.upass = request.GET.get("upass") temp=user.save() print(temp) context={'msg':"添加成功"} return render(request,'msg.html',context)
# user.uname="456" # user.upass="456" # return HttpResponse("ok")
def hello(request): return HttpResponse("hello world")
def findAll(request): rs=Users.objects.all() #jihe arr=[] for i in rs: #i相当于每一行 content={'id':i.id,'uname':i.uname,'upass':i.upass} arr.append(content) context={'uList':arr} return render(request,"infos.html",context)
def find(request): if request=="GET": keywords=request.GET.get("kd") else: keywords=request.POST.get("kd")
rs= Users.objects.filter(uname__contains=keywords) arr = [] for i in rs: # i相当于每一行 content = {'id': i.id, 'uname': i.uname, 'upass': i.upass} arr.append(content) context = {'uList': arr} return render(request, "infos.html", context)
def showUp(request,id): i= Users.objects.get(id=id) temp={'id': i.id, 'uname': i.uname, 'upass': i.upass} context={'one':temp} return render(request,"up.html",context)
def update(request): if request.method=="POST": sid=request.POST.get('id') upass=request.POST.get('upass') user=Users.objects.get(id=sid) user.upass=upass user.save() context = {'msg': "修改成功"} return render(request, 'msg.html', context)
def delete(request,id): user = Users.objects.get(id=id) user.delete() return HttpResponseRedirect("../all/")
def t1(request): return render(request,"t1.html")
def index(request): return render(request,"index.html")
|
from django.urls import path from . import views urlpatterns=[ path("all/",views.findAll), path("find/",views.find), path("add/",views.add), path("up/",views.update), path("del/<int:id>",views.delete), path("showAdd/",views.showAddUserPage), path("showup/<int:id>",views.showUp), path("t1/",views.t1), path("index/",views.index) ]
urls
|
from django.db import models
# Create your models here. #数据库模型 class Users(models.Model): id=models.IntegerField(primary_key=True) uname=models.CharField(max_length=255) upass=models.CharField(max_length=255)
models
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="../add/" method="post" name="frmAddUser"> {% csrf_token %} <p> <label>uname: </label><input type="text" name="uname"> </p> <p> <label>upass: </label><input type="password" name="upass"> </p> <p> <input type="submit" value="添加"> </p>
</form> </body> </html>
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ width: 900px; margin: 0px auto; } #top{ height: 100px; background-color: antiquewhite;
} #left{ width: 20%; background-color: antiquewhite; float: left; height: 400px; } #right{ width: 80%; background-color: antiquewhite; float: left; height: 400px; }
</style> </head> <body> <div id="top"> <h2>学生管理系统</h2> </div> <div id="left"> {% block left %} <ul> <li><a href="http://127.0.0.1:8000/stumng/all/">学生管理</a> </li> <li><a href="http://127.0.0.1:8000/usermng/all/">用户管理</a> </li> </ul> {% endblock %} </div> <div id="right"> {% block right %} <h1>欢迎使用学生管理系统</h1> {% endblock %} </div>
</body> </html>
|
index
{% extends "base2.html" %}
|
{#<!DOCTYPE html>#} {#<html lang="en">#} {#<head>#} {# <meta charset="UTF-8">#} {# <title>Title</title>#} {#</head>#} {#<body>#} {% extends "base2.html" %} {% block right%}
<form action="../find/" method="post" name="frmsearch"> {% csrf_token %}
<p><label>用户名:</label><input type="text" name="kd"> <input type="submit" value="查找"> </p> </form>
<table border="1"> <tr> <th>序号</th> <th>用户名</th> <th>密码</th> <th>操作</th> </tr> {% for item in uList %}
<tr> <td>{{ item.id }}</td> <td>{{ item.uname }}</td> <td>{{ item.upass }}</td> <td> <a href="../showup/{{ item.id }}">修改</a> <a href="../del/{{ item.id }}">删除</a> </td>
</tr> {% endfor %}
</table> <a href="../showAdd/">添加用户</a>
{% endblock %} {#</body>#} {#</html>#} {% block left %} <ul> <li><a href="../showAdd/">添加用户</a></li> <li><a href="../all/">查看用户</a></li> <li><a href="../index/">首页</a> </li> </ul>
{% endblock %}
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>{{ msg }}</h2> <h3><a href="../all/">查看信息</a> </h3> </body> </html>
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="../up/" method="post" name="frmAddUser"> {% csrf_token %} <input type="hidden" name="id" value="{{ one.id }}"> <p> <label>uname: </label><input type="text" name="uname" value="{{ one.uname }}" readonly> </p> <p> <label>upass: </label><input type="password" name="upass"> </p> <p> <input type="submit" value="修改"> <a href="../all/">返回</a> </p>
</form> </body> </html>
|