| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Django开发 -> 正文阅读 |
|
[Python知识库]Django开发 |
文章目录? ? ? ?一、中间件? ?? ?二.后台管理? ? ? 三.表单组件form的应用? ? ? 四.表单组件Modelform的应用? ? ? 五.登陆注册? ? ? 六.文件上传? ? ? 七.orm一、中间件
中间件这个术语第一次出现是 1968 年在德国加尔米施帕滕基兴举办的?NATO 软件工程大会结束后发表的一份报告中。这届大会正式确定了"软件工程"的概念,同时还探讨了软件设计、生产和分发等主题 一、中间件是什么?概述
?完成黑名单场景代码书写class BlacklistMiddleware(MiddlewareMixin): def get_ip(self, request): if request.META.get('HTTP_X_FORWARDED_FOR'): #它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项,正如上面所述, # 当你使用了代理时web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息, # 把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP ip = request.META.get('HTTP_X_FORWARDED_FOR') else: ip = request.META.get('REMOTE_ADDR') #表示发出请求的远程主机的 IP 地址,(远程)remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的, # 当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP, # 如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP return ip def process_request(self, request): print('----process request----') ip = self.get_ip(request) print(ip) blacklist = ['127.0.0.2', '127.0.0.2'] if ip in blacklist: return HttpResponse('禁止访问') else: pass ?看效果??使用中间件完成限制频率访问功能#用户访问频率控制 SPACE_TIME = 5 class BlockMiddleware(MiddlewareMixin): def process_request(self,request): current_time = time.time() request_time = request.session.get('request_time') if request_time is not None and current_time - request_time < SPACE_TIME: return HttpResponse("超过访问频率") else: request.session['request_time'] = current_time ?看效果 ?二.后台管理Django作为一个成熟的Web应用开发框架,其本身已经内置了使用比较友好的后台管理系统,包括数据管理和使用体验良好的界面,这是在众多Web应用开发设计中较为优秀的亮点一、初始化管理平台执行数据迁移命令,会看到项目内建的数据库迁移工作的执行过程,包括了内建后台管理系统使用的数据迁移,代码如下:
Django后台管理系统已经内建了用户,权限,资源访问,和设置的数据模型和关联关系,可以通过命令行命令创建超级用户
启动项目直接访问?http://127.0.0.1:8000/admin/可看到后台登录界面?如果想像我一样使用中文语言环境在settings设置中: LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' 输入创建好的账户和密码进入后台管理系统 在这里可以编辑个人信息增删改查用户 数据模型注册
效果:?但是上述数据模型得注册,并不能对数据模型进行自定义规范格式得处理,所以我们需要自定义规范格式操作通过以下代码
为了绑定好数据模型和数据管理类做了如下优化:
数据模型管理得指定属性
from django import forms class Feedform(forms.Form): GENDER = (('0','男'),('1','女')) # fd = forms.CharField(label="编号/隐藏",widget=forms.HiddenInput) name = forms.CharField(label="姓名") name.widget.attrs.update({'class':'name'}) # sex = forms.ChoiceField(label='性别',choices = GENDER,widget=forms.RadioSelect) # birthday = forms.DateField(label="生日",widget=forms.SelectDateWidget) # head = forms.FileField(label="头像",widget=forms.FileInput) content = forms.CharField(label="内容",widget=forms.Textarea) phone = forms.CharField() 表单数据处理
在网页视图中,通过表单对象得as_p 方式将表单元素渲染成p标签添加css样式
配置路由 app_name = 'formdemo' from django.urls import path from formdemo import views urlpatterns = [ path('get/',views.myform.as_view(),name='get'), 效果 ? ? ? ?? 四.表单组件Modelform的应用?ModelForm就是结合数据模型(Model),解决表单实例封装造成代码冗余得高级类表单
? 五.登录注册1.注册用户views.py from django.contrib.auth.models import User def myregister(request): if request.method == 'GET': return render(request,'myregister.html') else: username = request.POST.get("username") email = request.POST.get("email") password = request.POST.get("password") User.objects.create_superuser(username=username,email=email,password=password) return HttpResponse("注册成功") ?2.注册页面 <h2>注册页面</h2> <form action="" method="post"> {% csrf_token %} 用户名:<input type="text" name="username"><br> 邮箱:<input type="text" name="email"><br> 密码:<input type="text" name="password"><br> <input type="submit" value="注册" > 3.登录用户(注销和主页) from django.contrib.auth import authenticate,login,logout from django.contrib.auth.decorators import login_required @login_required(login_url='/smanage/mylogin') def myindex(request): return render(request,'myindex.html') def mylogout(request): logout(request=request) return redirect('smanage:myindex') def mylogin(request): if request.method == 'GET': return render(request, 'mylogin.html') else: username = request.POST.get("username") password = request.POST.get("password") user = authenticate(request=request,username=username, password=password) if user is not None: login(request=request, user=user) #http协议是无状态的协议 # 一个机制 cookie-session 机制 # 第一次 cookie-session 机制 # 第一次 客户-->服务器的时候(服务器怎么知道我第一次来呢?客户端没带cookie) # 服务端产生一个随机的字符串(一个身份标识 在服务器被称为session),将其存在数据库中,另外也给到客户端 cookie # 看响应头中set-cookie # 第二次客户+身份标识cookie -->服务器 去数据库中查询 else: return redirect('smanage:myregister') return redirect('smanage:myindex') 4.?myindex页面 <h4>"这是首页必须登录才能看见"</h4> 欢迎{{ request.user.username }},您已经登录成功 <----> <button><a href="{% url 'smanage:mylogout' %}">注销</a></button> 5. mylogin.html <form action="" method="post"> {% csrf_token %} 欢迎 {{ request.user }}<br> 用户名:<input type="text" name="username" placeholder="请输入用户名"><br> 密码 :<input type="password" name="password" placeholder="请输入密码"><br> <input type="submit" value="登录" > </form> 6.效果 ? ? ? ? ? 六.上传文件一.配置models.py模块 class UserInfo(models.Model): name = models.CharField(max_length=200) img = models.ImageField(upload_to='static') 二.在项目中添加static表? 三.配置view.py视图函数 from .models import UserInfo def userinfo_add(request): if request.method == 'GET': return render(request,'userinfo_add.html') else: name = request.POST.get('name') img = request.FILES.get('img') userinfo = UserInfo(name=name,img=img) userinfo.save() return HttpResponse("您的图片上传成功!") def userinfos(request): userinfos = UserInfo.objects.all() return render(request,'userinfos.html',{'userinfos':userinfos}) 四配置userinfo_add.html <form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} 用户姓名:<input type="text" name="name"> <br> 图片:<input type="file" name="img"> <br> <input type="submit" value="提交图片"> <button><a href="{% url 'article:userinfos' %}">查看详情</a></button> </form> 看效果 ? ? .配置好子项目的路由映射关系后,启动项目并打开网页? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 0:21:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |