python3.7 Django库的使用
源代码链接 : https://github.com/yfc-tourist/Python 找到new文件
-
python Django 网页搭建
(1).函数解析"""path()函数 path() 具有四个参数,两个必须参数:route 和 view, 两个可选参数:kwargs 和 name。即路由和视图是必填参数。 route 是一个匹配URL的准则(类似正则表达式)。 当Django响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。 为你的URL取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。 这个有用的特性允许你只改一个文件就能全局地修改某个URL模式。 注意: 要从URL捕获值,请使用尖括号。 捕获的值可以选择包括转换器类型。例如,用于 <int:name>捕获整数参数。如果未包含转换器/,则匹配除字符之外的任何字符串。 没有必要添加前导斜杠,因为每个URL都有。例如,它articles不是/articles。 默认情况下,以下路径转换器可用: str- 匹配除路径分隔符之外的任何非空字符串'/'。如果转换器未包含在表达式中,则这是默认值。 int - 匹配零或任何正整数。返回一个int。 slug - 匹配由ASCII字母或数字组成的任何slug字符串,以及连字符和下划线字符。例如, building-your-1st-django-site。 uuid - 匹配格式化的UUID。要防止多个URL映射到同一页面,必须包含短划线并且字母必须为小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID实例。 path- 匹配任何非空字符串,包括路径分隔符 '/'。这使您可以匹配完整的URL路径,而不仅仅是URL路径的一部分str。 比如要匹配一个视图中的函数路由,该函数有两个形参: def peopleList(request,book_id) path('<int:book_id>/',views.peopleList,name='peopleList') """ """re_path() 如果遇上路径和转换器语法都不足以定义的URL模式, 那么就需要使用正则表达式,这时候就需要使用re_path(),而非path()。 re_path(r'^(\d+)/$',views.peopleList,name='peopleList') """ ![该工程的结构,• myproject1: 项目的容器目录
(2)网站搭建
• student web项目目录结构
](https://img-blog.csdnimg.cn/20190514132445101.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lmY2phdmE=,size_16,color_FFFFFF,t_70)
使用的命令(DOS)
django-admin startproject myproject1
django-admin startapp student
#urls.py """myproject URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.2/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path,re_path#需增加 from student import views#需增加 urlpatterns = [ path('admin/', admin.site.urls), #path('www.baidu/<int:yfc_>',views.home), re_path("[a-z]/0$",views.home),#正则匹配成功,调用views.home #path('www.baidu/',views.home),#www.baidu/匹配成功,调用views.home ]
#views.py from django.shortcuts import render from django.http import HttpResponse#增加 # Create your views here. def home(request): #print(n) return(HttpResponse('<h2>Blog Home</h2>')) #print("\n yes yfc \n")
(3).运行
python manage.py runserver 0.0.0.0:8000 (DOS窗口运行)
在浏览器中输入 127.0.0.1:8000/a/0
————————
用另一种方法搭建网站 (以上面的项目为基础,向其中增加代码)
(1)创建student/Templates/login.html,向其中加入如下代码
<html> <head> <meta charset="utf-8" /> <title>user login</title> </head> <body> <form action="/dologin/" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="password" name="passwd"></p> <p><input type="submit" value="login"></p> </form> <p>{{username}}</p> <p>{{password}}</p> </body> </html>
(2)在urls.py增加
urlpatterns = [ re_path("www",views.login) ]
(3)在views.py增加
from django.template.context_processors import csrf def login(request): ctx={} return render(request, "login.html",ctx)
(4)在settings.py中 ,找到TEMPLATES向里面加入
'DIRS': [os.path.join(BASE_DIR,"student/Templates")],#html文件所在路径
(5)运行
python manage.py runserver 0.0.0.0:8000 (DOS窗口运行)
在浏览器中输入 127.0.0.1:8000/www
2.Django+数据库搭建
(1)向models.py增加
#models常用的Field,这些Field的参数见(https://blog.csdn.net/weixin_37773766/article/details/80330221) class Userinfo(models.Model): userid = models.AutoField(primary_key=True) #设置主键 username = models.CharField(max_length=20) #字符串字段,必须设置max_length参数 password = models.CharField(max_length=20) createCounttime=models.DateTimeField(auto_now_add=True) #帐号申请时间 class Studentinfor(models.Model): stuid = models.ForeignKey('Userinfo',to_field='userid',on_delete='CASCADE') name=models.CharField(max_length=20) age=models.IntegerField(max_length=3) #整形 gendle=models.BooleanField() # 布尔类型 classes=models.CharField(max_length=50) subject=models.CharField(max_length=50) result=models.FloatField() #浮点类型
(2)在settings.py中 ,找到INSTALLED_APPS向里面加入
'student', # web项目名
DOS 下运行 python manage.py makemigrations
出现 No changes detected,可能(2)设置错误、没有删除student\migrations\*_initial.py、(1)下没增加代码
(3) DOS 下运行 python manage.py migrate
如果无法迁移成功,则是项目文件下的*.sqlit3没删除
(4)在settings.py中 ,找到TEMPLATES向里面加入
'DIRS': [os.path.join(BASE_DIR,"student/Templates")],#html文件所在路径
(5)创建student/Templates/userinfo.html,向其中加入如下代码(调用具体的html文件,这是第三个需运行的文件)
它显示的是一个登陆界面,与views.py下的myhtml和add_data函数有关。 首先调用myhtml函数显示该网页,若点击按钮则调用add_data函数执行相关操做 <html> <head> <meta charset="utf-8" /> <title>add_user_info</title> </head> <body> <p align="center"> <form action="/add_data/" method="post"> #此句与views.py的处理函数对应 {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="password" name="passwd"></p> <p><input type="submit" value="adduser"></p> </form> </p> {{ added }} </body> </html>
创建student/Templates/showall.html,向其中加入如下代码
Html:(数据显示文件-showall.html) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>datalist</title> </head> <body> <table style="color: green" border="2"> <td>id</td> <td>username</td> <td>createtime</td> {% for m in datas %} <tr> <td>{{ m.userid }}</td> <td>{{ m.username }}</td> <td>{{ m.createCounttime }}</td> </tr> {% endfor %} </table> </body> </html>
(6)在视图文件views.py中输入处理代码(url匹配成功,这是第二个运行的文件)
from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect from django.template.context import RequestContext #包装csrf请求,避免django认为其实跨站攻击脚本 from django.views.decorators.csrf import csrf_exempt from django.template.context_processors import csrf from .models import Studentinfor from .models import Userinfo def myhtm 3ff7 l(request): ctx={} return render(request, "userinfo.html",ctx) #request: 用于生成响应的请求对象 #template_name: 要使用的模板的完整名称 #context:context: 添加到模板上下文的一个字典. 默认是一个空字典. #如果字典中的某个值是可调用的, 视图将在渲染模板之前调用它. def add_data(request): #对数据库进行增加操作,并返回操做结果 username=request.POST['username'] pin = request.POST['passwd'] userinfo = Userinfo() userinfo.username=username userinfo.password=pin userinfo.save() ctx={} ctx.update(csrf(request)) ctx['added']='添加数据成功!' return render(request, "userinfo.html",ctx) def query(request): #对数据库进行查加操作,并返回操做结果 b=Userinfo.objects.all() return render(request,'showall.html',{'datas':b}) #此方法的作用---结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
(7) 在project1目录下urls.py添加路径信息。(输入127开头的url后,这是第一个运行的文件)
from django.urls import re_path from student import views urlpatterns = [ re_path(r'^myhtml/$', views.myhtml,name='myhtml'), re_path(r'^add_data/$', views.add_data,name='adddata'), re_path(r'^query/$', views.query,name='queryall'), ]
通过网站,实现了数据库的增加与查询
django 数据库操作(在views.py中)
UserInfo是models.py下的一个类 from .models import Userinfo 查 UserInfo.objects.all() #查出库中所有的数据 UserInfo.objects.all().values('user') #只取user列 UserInfo.objects.all().values_list('id','user') #取出id和user列,并生成一个列表 UserInfo.objects.get(id=1) #查询字段是1的的这条数据,如果是多条和没有的时候会报错,尽量结合try-except使用 a=UserInfo.objects.filter(id=1) #同上get()方法,但get()方法返回的不是iterator 对返回的iterator进行判断是否有值 a.exists()、a.count()//返回值的个数、a 增 UserInfo.objects.create(user='yangmv',pwd='123456') 或者 obj = UserInfo(user='yangmv',pwd='123456') obj.save() 或者 dic = {'user':'yangmv','pwd':'123456'} UserInfo.objects.create(**dic) 改 UserInfo.objects.filter(user='yangmv').update(pwd='520') #先找到,然后才能改(update可更新多条) 或者 obj = UserInfo.objects.get(user='yangmv') #查询到一条你要更新数据 obj.pwd = '520' #更新 obj.save() 删 UserInfo.objects.filter(user='yangmv').delete() #删除多条数据(过滤出user字段等于'yangmv'的都删除) UserInfo.objects.all().delete() #删除表中全部数据 UserInfo.objects.get(aa="tte").delete() #删除一条aa等于‘tte’的数据
——————————————————————————
以下是对上面代码的完善
//查数据 views.py: def search(request): ctx = {} return render(request, "search.html", ctx) def find(request): userid=request.POST['userid'] ctx={} ctx.update(csrf(request)) try: a=Userinfo.objects.filter(userid=userid) except : ctx['result'] = '输入有误!' else: if not a.exists(): ctx['result'] = '数据不存在!' else: ctx['result'] = '数据存在!' #a=model_to_dict(a) ctx['datas']=a print(a) #return render(request, 'showall.html', {'datas': a}) return render(request, "search.html",ctx) urls.py: re_path("search/",views.search), re_path("find/",views.find), Templates/search.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>search</title> </head> <body> <p align="center"> <form action="/find/" method="post"> {% csrf_token %} <p>userid:<input type="text" name="userid"></p> <p><input type="submit" value="search"></p> </form> </p> <table style="color: green" border="2"> <td>userid</td> <td>username</td> <td>password</td> <td>createtime</td> {% for m in datas %} <tr> <td>{{ m.userid }}</td> <td>{{ m.username }}</td> <td>{{ m.password }}</td> <td>{{ m.createCounttime }}</td> </tr> {% endfor %} </table> {{ result }} </body> </html> //删数据 views.py: def delete(request): ctx = {} return render(request, "delete.html", ctx) def delete_result(request): username = request.POST['username'] passwd=request.POST['passwd'] ctx = {} ctx.update(csrf(request)) try: a = Userinfo.objects.filter(username=username,password=passwd) except: ctx['result'] = '输入有误!' else: if not a.exists(): ctx['result'] = '数据不存在!' else: a.delete() ctx['result'] = '数据删除!' print(a) return render(request, "delete.html", ctx) urls.py: re_path("delete/",views.delete), re_path("delete_result/",views.delete_result), Templates/delete.html: <html> <head> <meta charset="utf-8" /> <title>del_user_info</title> </head> <body> <p align="center"> <form action="/delete_result/" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="password" name="passwd"></p> <p><input type="submit" value="delete"></p> </form> </p> {{ result }} </body> </html> //改数据 views.py: def update(request): ctx = {} return render(request, "update.html", ctx) def update_result(request): username=request.POST['username'] password = request.POST['passwd'] update_password = request.POST['update_passwd'] ctx = {} ctx.update(csrf(request)) try: a = Userinfo.objects.filter(username=username,password=password) except: ctx['result'] = '输入有误!' else: if not a.exists(): ctx['result'] = '数据不存在!' else: a.update(password=update_password) ctx['result'] = '数据已变更!' print(a) return render(request, "delete.html", ctx) urls.py: re_path("update/",views.update), re_path("update_result/",views.update_result), Templates/update.html: <html> <head> <meta charset="utf-8" /> <title>add_user_info</title> </head> <body> <p align="center"> <form action="/update_result/" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="password" name="passwd"> update_password:<input type="password" name="update_passwd"></p> <p><input type="submit" value="save"></p> </form> </p> {{ result }} </body> </html>
- 使用 Django 和 Python 开发 Web 站点
- [Dynamic Language] Python Django: 模板引擎(1)基本使用
- Python Web 框架,第 1 部分: 使用 Django 和 Python 开发 Web 站点
- python下的web开发框架-Django,django模板的使用
- python Django模板的使用方法(图文)
- 在Django1.6和python中使用mysql
- python学习之--Django--初次使用templates
- Python Web 框架,第 1 部分: 使用 Django 和 Python 开发 Web 站点
- python框架之django使用系列教程(1),原创,转载请注明出处
- [原创]Python/Django使用富文本编辑器XHeditor上传本地图片
- 在部署django应用时,mod_python不再推荐,使用wsgi方式
- Python Shell 解释器下使用Django Model
- 使用Python的web.py框架实现类似Django的ORM查询的教程
- 使用Python的Django框架中的压缩组件Django Compressor
- Python Django 使用中文
- Python-Django 使用 Hudson做CI服务器实践记
- Django1.5+Python3.3下groundwork的使用
- python Django 学习笔记(三)—— 模版的使用
- Python web框架Django学习(1)——在win7 64bit下配置开发环境Django:一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django,使你能够以最小的代价构建和
- Python系列视频教程: Django【13讲】第六讲 模板基本使用