python Django基础

一. 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


  1. 变量 {{}}


语法: {{变量}}


作用:在指定位置显示变量中的数据


  1. 过滤器 |


语法:{{变量|YYY|ZZZ}}


作用:进行筛选并操作


例如:{{name|lower}} 将文本转成小写


{{list|join:“,”}} 使用逗号连接列表元素


{{bio|truancatewords:30}} 显示bio变量的前30个词


 


 


常用过滤器说明
default 空或False时提供默认值 {{value|default:"空"}}
length 返回长度 {{value|length}}
filesizeformat 文件大小格式化 {{value|filesizeformat}}

 


  1. 标签


语法: {% 开始 标签 %} {% 结束标签 %}


作用:完成指定功能


 


 


开始 标签结束标签说明
{% for 变量 in 集合%} {% endfor %} 循环
{% if 变量 %}{% elif 变量 %}{% else %} {% end if %} 条件
{% extends "页面名.html" %}   继承模板
{% block 名%} {% endblock%} 留出子模板填充内容的位置

 


二。学生管理系统的实例 (用户管理)


  1. 添加用户的功能


  • 添加的html页面


img


  • 提示的html页面


img


  • 添加的views


img


  • 添加的urls


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>
 
posted @ 2021-03-23 21:34  YangYuJia  阅读(17)  评论(0)    收藏  举报