Django之 CVB&FVB

Posted lhly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之 CVB&FVB相关的知识,希望对你有一定的参考价值。

cvb 即class view 和funtion view  两种方式 发送get和post请求

前后端不分离的写法,定义一个html(form.html),在view中写逻辑(cvb&fvb)

备注:需要注意csrf的问题,如果多次提交重复的数据会报403,解决办法两种

1.在settings.py-MIDDLEWARE-将csrf(第四行)注释掉 (

‘django.middleware.csrf.CsrfViewMiddleware‘,

)

2.在form.html中写{% csrf_token%} 

form.html的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/add_article/" method="post">
{% csrf_token %}
    title:<input type="text" name="title">
    desc:<input type="text" name="desc">
    content:<input type="text" name="content">
    category:<select name="category">
        {% for c in categorys %}
            <option value="{{ c.id }}">{{ c.name }}</option>
        {% endfor %}
    </select>
    <input type="submit" value="提交">
</form>
</body>
</html>

views.py中的代码

#function fvb方式
def add_article(request):
    if request.method == GET:
        categorys = Category.objects.all()
        return render(request,form.html,locals())
    else:
        title = request.POST.get(title)
        desc = request.POST.get(desc)
        content = request.POST.get(content)
        category = request.POST.get(category)
        article = Article(title=title,desc=desc,category_id=category,content=content)
        article.save()
        return HttpResponseRedirect(/blog)#重定向


#class cvb方式
class ArticleView(View):
    def get(self,request):
        categorys = Category.objects.all()
        return render(request, form.html, locals())
    def post(self,request):
        title = request.POST.get(title)
        desc = request.POST.get(desc)
        content = request.POST.get(content)
        category = request.POST.get(category)
        article = Article(title=title, desc=desc, category_id=category, content=content)
        article.save()
        return HttpResponseRedirect(/blog)  # 重定向

Django自带过滤器

1. 页面显示部分内容,超过长度内容使用.... 显示

2.list、字符串切片显示

3.给默认值

4.时间戳按照格式化显示

5.css、js注入

   views.py代码

def demo(request):
    import datetime
    cur_time = datetime.datetime.now()
    age = 18
    name = haha
    article_content = 人生如此美好应该学习python的django常用使用
    comments = <h1 style="font-size:500px">hello</h1>
    navs = [linux, python, java, c++, jmeter]
    return render(request, demo.html, locals())  #locals() 返回所有的参数

demo.html代码

<body>
    {{ age|add:‘1‘ }}
    <br>
    {{ name|upper }}
    {{ name|lower }}
    {{ name|add:‘先生‘|upper }}
{#    大小写、字符串则自动拼接、支持多次拼接 #}
    <br>
    {{ article_content|truncatechars:"10"}}
{#    截断字符串,多余的字符串用....显示#}
    <br>
    {{ navs|slice:"0:3" }}
    {#    list切片,显示前3个元素#}
    <br>
    {{ navs|join:"==" }}
    <br>
     ----长度{{ navs|length}}
    <br>
    {{ author|default:"管理员" }}
{#    默认值#}
    <br>
    {{ cur_time|date:‘Y-m-d H:i:s‘ }}
{#时间格式化显示#}
    <br>
    {{ js_str|safe }}
    <br>
    {{ comments|safe }}
{#  如果后面加safe,认为是安全的字符串,浏览器会按照标签解析;不加,浏览器按照字符串解析#}
{# css、js注入#}

</body>

 自定义过滤器

views.py代码

def demo(request):
    import datetime
    cur_time = datetime.datetime.now()
    age = 18
    name = ‘haha‘
    article_content = ‘人生如此美好应该学习python的django常用使用‘
    comments = ‘<h5 style="font-size:200px">你好呀</h5>‘
    js_str = "<script>alert(哈哈哈)</script>"
    navs = [‘linux‘, ‘python‘, ‘java‘, ‘c++‘, ‘jmeter‘]
    article_content2 = ‘朝鲜一个金三胖,已经登录太阳,因为太热,选择晚上去月球‘
    say = ‘今天吃饭的时候,碰见了一个没素质213的人,嘴里一直说脏话sb‘
    return render(request, ‘demo.html‘, locals())  #locals() 返回所有的参数

demo.html代码

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

    {{ article_content2|hanmin}}
    <br>
    {{ article_content2|hanmin2:"金丝胖" }}
{#自定义过滤器#}
    <br>

    {% mingan3 say ‘213‘ ‘sb‘ %} ==========
{#    需要替换多个参数,需要用simple_tag#}
    <br>
</body>

my_tags.py自定义过滤器

from django.template import Library

register = Library()   #固定写法,必须叫register

#自定义过滤器,单个参数
@register.filter(name=hanmin)  定义了名称,html文件中使用定义的name
def mingan(value):
    ‘‘‘将金三胖替换为金正恩‘‘‘
    if 金三胖 in value:
        value = value.replace(金三胖, 金正恩)
    return value

#自定义过滤器,最多2个参数
@register.filter(name=hanmin2)
def mingan2(value, s):
    ‘‘‘将金三胖替换为s‘‘‘
    if 金三胖 in value:
        value = value.replace(金三胖, s)
    return value

# ‘你是个sb123666‘, (sb,123,666)  simple_tag,可以过滤多个参数
@register.simple_tag
def mingan3(value, *args):
    ‘‘‘将敏感词替换为*‘‘‘
    for line in args:
        if line in value:
            value = value.replace(line, **)
    return value

 

以上是关于Django之 CVB&FVB的主要内容,如果未能解决你的问题,请参考以下文章

CVB生命周期(APIView源码解析)

Django之session验证的三种姿势

Django之session验证的三种姿势

Mahout 0.9 CVB 文档主题映射错误

如何打印 mahout lda cvb 主题

详解Flow Vector Bound (FVB) 约束