程序目录

models.py

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    user=models.CharField(max_length=32)

urls.py

"""s14_day22 URL Configuration

"""
from django.contrib import admin
from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$', views.login),
    url(r'^index/$', views.index),
    url(r'^logout/$', views.logout),
    url(r'^test_t/(\d+)$', views.test_t),
    url(r'^cache/$', views.cache),
    url(r'^signal/$', views.signal),
    url(r'^fm/$', views.fm),
]

views.py

from django.shortcuts import render,redirect,HttpResponse

# Create your views here.
def login(request):
    if request.method=="GET":
        return render(request,'login.html')
    elif request.method=="POST":
        user=request.POST.get('user')
        pwd=request.POST.get('pwd')
        if user=="root" and pwd=="123456":
            #生成随机字符串
            #写到用户浏览器cookie
            #保存到session中
            #在随机字符串对应的字典中设置相关内容。。。
            #session中设置值
            request.session['username']=user
            request.session['is_login']=True
            if request.POST.get('rmb',None)=="1":
                #设置session超时时间 不设置 默认超时时间两周
                request.session.set_expiry(10) #秒
            return redirect("/index/")
        else:
            return render(request,'login.html')

from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt  #不需要csrf认证
def index(request):
    # 获取当前用户的随机字符串
    # 根据随机字符串获取对应的信息
    # session中获取值
    if request.session.get('is_login',False):
        return render(request,'index.html',{'username':request.session['username']})
    else:
        return HttpResponse('gun')

@csrf_protect #需要csrf认证
def logout(request):
    request.session.clear()
    return redirect('/login/')

class Foo:
    def render(self):
        return HttpResponse('ok')

def test_t(request,nid):
    # int('111ed')
    print("xiaoxima-->没带钱")
    # return HttpResponse('ok')
    return Foo()

from django.views.decorators.cache import cache_page
@cache_page(10) #10秒钟失效
def cache(request):
    import time
    ctime=time.time()
    return render(request,'cache.html',{'ctime':ctime})

def signal(request):
    from app01 import models

    obj=models.UserInfo(user='root')
    print('end')
    obj.save()

    obj=models.UserInfo(user='lwb')
    obj.save()

    obj = models.UserInfo(user='alex')
    obj.save()

    from sg import pizza_done
    pizza_done.send(sender="asasa",toppings=123,size=456)

    return HttpResponse('ok')

#################Form#############################
from django import forms
from django.forms import widgets
from django.forms import fields
class FM(forms.Form):
        #字段本身自己只做验证
        #
        user=fields.CharField(
            error_messages={'required':'用户名不能为空'},
            widget=widgets.Textarea(attrs={'class':'c1'}),
            label="用户名:",
            # initial='root_xxpp'
        )
        pwd=fields.CharField(
            max_length=12,
            min_length=6,
            error_messages={'required':'密码不能为空','min_length':'密码长度不能小于6','max_length':'密码长度不能大于12',},
            widget=widgets.PasswordInput(attrs={'class':'c2'})
        )
        email=fields.EmailField(error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'})

        f=fields.FileField()

        p=fields.FilePathField(path='app01')

        city1=fields.MultipleChoiceField(
            choices=[(0,'上海'),(1,'广州'),(2,'清远')]
        )

        city2 = fields.ChoiceField(
            choices=[(0, '上海'), (1, '广州'), (2, '清远')]
        )

        city3 = fields.MultipleChoiceField(
            choices=((1,'上海'),(2,'北京'),),
            initial=[1,],
            widget=widgets.SelectMultiple
        )

        city4 = fields.CharField(
            initial=2,
            widget=widgets.RadioSelect(choices=((1,'清远'),(2,'深圳'),))
        )

from app01 import models
def fm(request):
    if request.method=="GET":
        # 从数据库中获取到数据
        dic={
            "user":"r1",
            "pwd":"123123",
            'email':"asdf@126.com",
            "city1": [1,2],
            "city2":1,
        }
        obj=FM(initial=dic)
        return render(request,'fm.html',{'obj':obj})
    elif request.method=="POST":
        #获取用户所有的数据
        #每条数据请求的验证
        # 成功:获取所有的正确信息
        # 失败:显示错误信息
        obj=FM(request.POST)
        r1=obj.is_valid()
        if r1:
        #     print(obj.cleaned_data)
            models.UserInfo.objects.create(**obj.cleaned_data)
        else:
            # ErrorDict
            # print(obj.errors.as_json())
            # print(obj.errors['user'][0])
            return render(request,'fm.html',{'obj':obj})
        return render(request,'fm.html')

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/login/" method="post">
{#        {% csrf_token %}#}
        <input type="text" name="user">
        <input type="password" name="pwd">
        <input type="checkbox" name="rmb" value="1">10秒免登录
        <input type="submit" value="提交">
        <input id="btn1" type="button" value="按钮1">
        <input id="btn2" type="button" value="按钮2">
    </form>
    <script src="/static/jquery-1.12.4.js"></script>
    <script src="/static/jquery.cookie.js"></script>
    <script>
        $(function () {
{#            obj=XMLHttpRequest()#}
{#            obj.open()#}
{#            obj.send()#}
{#            #}
            $.ajaxSetup({
                beforeSend:function (xhr,settings) {
                    xhr.setRequestHeader('X-CSRFtoken',csrftoken)
                }
            });

            var csrftoken=$.cookie('csrftoken');
            $('#btn1').click(function () {
                $.ajax({
                    url:'/login/',
                    type:"post",
                    data:{'user':'root','pwd':'123'},
{#                    headers:{'X-CSRFtoken':csrftoken},#}
                    success:function (arg) {

                    }
                    
                })
            });
            $('#btn2').click(function () {
                $.ajax({
                    url:'/login/',
                    type:"post",
                    data:{'user':'root','pwd':'123'},
{#                    headers:{'X-CSRFtoken':csrftoken},#}
                    success:function (arg) {

                    }

                })
            })
        })
    </script>
</body>
</html>

{#xhr: xml http request对象#}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>欢迎登录:{{ username }}--{{ request.session.username }}</h1>
    <a href="/logout/">注销</a>
</body>
</html>

m1.py

from django.utils.deprecation import MiddlewareMixin

class Row1(MiddlewareMixin):
    def process_request(self,request):
        print('王生')

    def process_view(self,request,view_func,view_func_args,view_func_kwargs):
        print('张欣彤')

    def process_response(self,request,response):
        print('扛把子')
        return response

from django.shortcuts import HttpResponse
class Row2(MiddlewareMixin):
    def process_request(self,request):
        print('陈毅强')
        # return HttpResponse('走')

    def process_view(self, request, view_func, view_func_args, view_func_kwargs):
        print('张需要')

    def process_response(self,request,response):
        print('侯亚凡')
        return response

class Row3(MiddlewareMixin):
    def process_request(self,request):
        print('刘冬')

    def process_view(self,request,view_func,view_func_args,view_func_kwargs):
        print('邵琳')

    def process_response(self,request,response):
        print('连之类')
        return response

    def process_exception(self,request,exception):
        if isinstance(exception,ValueError):
            return HttpResponse("出现异常了》。。。")

    def process_template_response(self,request,response):
        # 如果Views函数返回的对象中,具有render方法
        print('----------------')
        return response

settings.py
from django.middleware.csrf import CsrfViewMiddleware
MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',#process_response 返回时 修改和保存获取到的数据到缓存里
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'Middle.m1.Row1',
    # 'Middle.m1.Row2',
    # 'Middle.m1.Row3',
    'django.middleware.cache.FetchFromCacheMiddleware',#process_request 请求时 获取缓存
]

STATIC_URL = '/static/'
STATICFILES_DIRS=(
    os.path.join(BASE_DIR,'static'),
)

SESSION_SAVE_EVERY_REQUEST = True

# SESSION_ENGINE = 'django.contrib.sessions.backends.db'  # session保存到数据库引擎(默认)

# SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # session保存到缓存引擎
# SESSION_CACHE_ALIAS = 'default'

# SESSION_ENGINE = 'django.contrib.sessions.backends.file'  # session保存到文件引擎
# SESSION_FILE_PATH = os.path.join(BASE_DIR,'save_session')  # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T

# SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'   # session保存到缓存+数据库

# SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # session保存到加密cookie

# CACHES = {
#     'db3': {
#         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
#         'LOCATION': '127.0.0.1:11211',
#     },
#
#     'db1': {
#         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
#         'LOCATION': 'unix:/tmp/memcached.sock',
#     },
#
#     'db2': {
#         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
#         'LOCATION': [
#             '172.19.26.240:11211',
#             '172.19.26.242:11211',
#         ]
#     }
# }

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR,'cache')
    }
}

cache.html

{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>{{ ctime }}</h1>
    <h1>{{ ctime }}</h1>

    {% cache 10 c1 %}
    <h1>{{ ctime }}</h1>
    {% endcache %}

</body>
</html>

sg.py

from django.core.signals import request_finished
from django.core.signals import request_started
from django.core.signals import got_request_exception

from django.db.models.signals import class_prepared
from django.db.models.signals import pre_init, post_init
from django.db.models.signals import pre_save, post_save
from django.db.models.signals import pre_delete, post_delete
from django.db.models.signals import m2m_changed
from django.db.models.signals import pre_migrate, post_migrate

from django.test.signals import setting_changed
from django.test.signals import template_rendered

from django.db.backends.signals import connection_created

def f1(sender, **kwargs):
    print("f1oo_callback")
    # print(sender, kwargs)

# def f2(sender, **kwargs):
#     print("f2oo_callback")
#     print(sender, kwargs)
pre_init.connect(f1)
# pre_init.connect(f2)

# xxoo.connect(callback)
# xxoo指上述导入的内容


import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

def callback(sender, **kwargs):
    print("callback")
    print(sender, kwargs)

pizza_done.connect(callback)

fm.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/fm/" method="post">
        {% csrf_token %}
        <p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
        <p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
        <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
        <p>{{ obj.f }}{{ obj.errors.f.0 }}</p>
{#        {{ obj.p }}#}
        {{ obj.city1 }}
        {{ obj.city2 }}
{#        {{ obj.city3 }}#}
{#        {{ obj.city4 }}#}
        <input type="submit" value="提交">
    </form>
</body>
</html>

Form验证实例的更多相关文章

  1. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  2. (实用篇)php通过会话控制实现身份验证实例

    会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...

  3. jQuery 验证实例(shopnc二次开发)

    shopnc 商家用户实现添加用户与前台用户分离, jQuery 验证实例 equalTo:等于 <div id="saleRefund" show_id="1&q ...

  4. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  5. Bootstrap+PHP表单验证实例

    简单实用的Bootstrap+PHP表单验证实例,非常适合初学者及js不熟悉者,还有ajax远程验证 js验证表单 1 $(document).ready(function() { 2 $('#def ...

  6. jQuery-easyui和validate表单验证实例

    jQuery EasyUI 表单 - 表单验证插件validatebox 使用时需要向页面引入两个css文件如下: <link rel="stylesheet" href=& ...

  7. formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用

    实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...

  8. Cookie && Session之验证实例

    为了防止各种自动登录,以及反作弊和破坏,往往会要求登录时让用户输入随机产生的验证码(这组验证码是一组数字和字母),这样可以起到一定的防止他人利用程序让机器自动反复登录的情况.在PHP下要实现这种功能是 ...

  9. 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...

  10. Django 进阶篇之 Form验证

    Django Form验证 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁 ...

随机推荐

  1. nacos(六): 创建第一个多模块微服务项目(生产者与消费者)

    要创建出生产者与消费者一体的多模块项目,总体来说分成三个步骤.分别是先创建出项目主体,再分别创建出生产者与消费者. 步骤一:创建项目主体 1. 先创建一个单体项目作为项目的主题.在这里,我们不用脚手架 ...

  2. 天线增益是什么意思?DBI越大越好吗?

    作者: 技象物联网/ 行业百科 / 无线通信, 通信系统 / 2023年6月23日 11:58:21 天线增益是指天线在某个方向上相对于一个理想点源天线所辐射的功率密度的增益.换句话说,天线增益是天线 ...

  3. D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> off

    D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> ...

  4. 常见的各类LLM基座模型(GPT、DeepSeek、Qwen等)模型解析以及对比

    From: https://www.big-yellow-j.top/posts/2025/02/15/LLM.html 各类LLM模型技术汇总 只去对比整体框架,对所采用的激活函数,归一化处理,位置 ...

  5. Angular CLI 源码分析

    准备: 安装 Node.js https://nodejs.org/: 安装 VS Code https://code.visualstudio.com/: 创建文件夹 angular-cli-sou ...

  6. 晶振测试仪GDS-80系列参数

    晶振测试仪GDS-80系列 一.产品简介 晶振测试仪GDS-80系列是高性价比的晶振测试系统,采用网络分析技术,实现智能化测量,符合IEC-444标准.测量频率范围10KHz-200KHz,1MHz- ...

  7. 腾讯地图web端请求报错113.该功能未授权

    问题描述: 请求地址:https://apis.map.qq.com/jsapi?qt=geoc&addr=%2C%2C%2C&key=你的key&output=jsonp&a ...

  8. 从RNN、LSTM到NTM、MANN——神经网络的记忆与推理进化

    从RNN.LSTM到NTM.MANN--神经网络的记忆与推理进化 一.前言:为什么要研究记忆? (温馨提示:在阅读本文之前,请确保你已经对深度学习中最基本的概念有一定的了解,例如:激活函数.多层感知机 ...

  9. 事务及mysql中的隔离级别

    事务,一个或一组sql语句组成的执行单元,是最小的执行单元,要么全执行,要么全不执行.如果单元中某条sql语句执行失败,整个单元将会回滚,所有受影响的数据返回到事务开始前的状态. 事务具有ACID四个 ...

  10. 基础指令:sudo提权、通配符、特殊符号、stat命令、id命令、正则表达式

    目录 4.4 sudo提权 授权的两种方法 4.4 通配符-查文件 4.5 特殊符号 4.6 stat输出文件的详细内容 4.7 id命令查看用户基本信息 4.8 正则表达式 4.8.1 符号 ^ 4 ...