Python全栈 Web(Django框架、HttpRequest,csrf跨域攻击)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发、项目、flask项目、项目实战、django框架、Python项目、Python的Flask框架、Pytho.
Djanog 的ORM
    自定义查询对象 - objects
        声明一个类 EntryManager 继承自models.Manager
        允许在EntryManager 的类中添加自定义函数

        class EntryManager(models.Manager):

            def 函数名(self, 自定义参数列表):
                ...
                return ...

        使用EntryManager 来覆盖 Models类中原有的objects


#自定义AuthorManager类,用于覆盖Author实体类中的objects
class AuthorManager(models.Manager):
  def age_lt(self,age):
    return self.filter(age__lt=age)

        class Entry(models.Model):
            objects = EntryManager()
            name = models.CharField()


def titleCount_views(request):
  # count = Book.objects.title_count('老王')
  # return HttpResponse('包含老王的书籍的数量为%d' % count)

  authors = Author.objects.age_lt(45)
  for author in authors:
    print(author.name,author.age)
  return HttpResponse("Query OK")

HttpRequest 请求:
    什么是HttpRequest  在Django中就是请求对象的封装体现  里面封装了
    请求过程中的所有信息 在Django中HttpRequest被封装成了
    request对象  被封装到请求处理视图中作为参数,在调用个视图时自动传入
    HttpRequest中的主要内容:
        request.scheme      请求的协议
        request.body        请求主题
        request.path        请求具体资源路径
        request.get_host()  请求的主机地址或域名
        request.method      请求方法
        request.GET         封装了get请求方式所提交的数据
        request.POST        封装了POST请求方式所提交的数据
        request.COOKIES     封装了cookies中所有数据
        request.META        封装了请求的元数据
        request.META.HTTP_REFERER
                封装了请求的源地址
    获取请求数据:
        GET请求方式
            request.GET["名称"]
        POST请求方式
            request.POST["名称"]
            CSRF  cross-site request forgery
                   跨站点      请求     伪装
            解决方案:
                1.如果想通过CSRF通过CSRF验证  则需要在表单中的第一行增加
                  标签:{% csrf_token %}

<form action="/03-post/" method="post">
  <!-- 主要用于在服务器端通过 csrf 验证的 -->
  {% csrf_token %}
  <p>
    姓名:<input type="text" name="uname">
  </p>

                2.
                  删除settings.py 中MIDDLEWRE中删除中间件

                3.在处理函数上增加装饰器
                  @csrf_protect
                  表示受保护的请求

使用forms模块处理表单
    forms 模块的作用
        通过forms模块 允许将表单与class相结合
        允许通过 class生成表单
    使用froms模块
        1.创建一个forms.py模块
        2.打入django的forms
          from django import forms
        3.创建class
          一个class对应一个表单
          class UserForm(forms.Form):
            ...
        4.在class中创建属性
          一个属性到表单中会对应生成一个控件

from django import forms

# 为topic控件初始化数据
TOPIC_CHOICE = (
  ('1','好评'),
  ('2','中评'),
  ('3','差评'),
)

#表示评论内容的表单控件们
#控件1 - 评论标题 - 文本框
#控件2 - Email - Email框
#控件3 - 评论内容 - Textarea
#控件4 - 评论级别 - Select
#控件5 - 是否保存 - Checkbox
class RemarkForm(forms.Form):
  # subject - input type='text'
  # label 表示的是控件前的文本
  subject=forms.CharField(label='标题')
  # email - input type='email'
  email = forms.EmailField(label='邮箱')
  # message - Textarea
  # widget=forms.Textarea,表示将当前属性变为多行文本域
  message = forms.CharField(label='内容',widget=forms.Textarea)
  # topic - Select
  topic = forms.ChoiceField(label='级别',choices=TOPIC_CHOICE)
  # isSaved - checkbox
  isSaved = forms.BooleanField(label='是否保存')

    在模板中解析form对象:
        需要自定义form表单
        在表单中需要自定义按钮
        处理方法:
            在视图中创建form对象并发送到模板中

def form_views(request):
  if request.method == 'GET':
    form = RemarkForm()
    return render(request,'04-form.html',locals())

            手动解析:
                在模板中循环解析
                {% for field in form %}
                    {{field}} 表示的就是控件
                    {{ field.label }} 表示的就是label的值
                {% endfor %}
            自动解析:
                {{ form.as_p }}
                将form中的每个属性使用p标记包裹起来再显示的
                {{ form.as_ul }}
                将form对象中的每个属性使用li标记包裹起来 在显示在网页上
                必须手动提供ol或ul标签
                {{ form.as_table }}
                将form对象的每个属性使用tr标记包裹起来 在显示在网页上

    {% csrf_token %}
    {% comment '手动解析' %}
    {% for field in form %}
      <p>
        {{ field.label }}:{{ field }}
      </p>
    {% endfor %}
    {% endcomment %}
    <ul>
      {{ form.as_ul }}
    </ul>

    在视图中 通过form.Form自动获取表单数据
        1.通过forms.Form的构造器来接受post数据
          form = xxxForm(request.POST)
        2.必须使用form通过验证之后 在取值
          form.is_valid()
          返回值为True表示数据已通过所有验证 允许取值
          返回False提交数据存在未通过验证的 无法取值
        3.通过 form.cleaned_data 来接受提交来的数据

    # 通过RemarkForm自动接收数据
    # 1.将request.POST数据传递给RemarkForm构造器
    form = RemarkForm(request.POST)
    # 2.验证form对象
    if form.is_valid():
      # 3.通过验证后获取具体的数据
      cd = form.cleaned_data
      subject = cd['subject']
      email = cd['email']
      isSaved = cd['isSaved']
      message = cd['message']
      topic = cd['topic']
      print(subject,email,isSaved,message,topic)
    return HttpResponse('Post OK')






相关文章
|
3月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
2月前
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
打造高效的Web Scraper:Python与Selenium的完美结合
|
1月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
1月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
3月前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
348 9
|
3月前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
222 15
|
3月前
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
261 4
|
3月前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
238 7
|
4月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
220 7
|
4月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
174 2

热门文章

最新文章