【Django笔记】5 Django模板

news2024/11/30 14:48:20

1.  Django-bootstrap3

Bootstrap 是要给CSS/HTML 框架

Django-bootstrap3 是Bootstrap3 集成到Django中,作为Django 的一个应用。

(3 表示版本号)

Django-bootstrap3 安装

django-bootstrap3 · PyPI

Installation

  1. Install using pip:

    pip install django-bootstrap3
    

    Alternatively, you can install download or clone this repo and call pip install -e ..

  2. Add to INSTALLED_APPS in your settings.py:

    INSTALLED_APPS = (
        # ...
        "bootstrap3",
        # ...
    )

安装 bootstrap3 失败安装 bootstrap4 

 pip3  install django-bootstrap4

pip  show  django-bootstrap4 

 guest/settings.py

添加 

'bootstrap4'
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sign',
    'bootstrap4'
]

ImportError: cannot import name 'url' from 'django.conf.urls' (D:\software\python3\anconda3\Lib\site-packages\django\conf\urls\__init__.py)

问题原因:

https://wenku.csdn.net/answer/d0b45f1a337d4672b2b708c7dab43e61

"""guest 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.urls import url
from django.contrib import admin
from django.urls import path
from sign import views

urlpatterns = [
    path(r'^admin/', admin.site.urls),
    path(r'^index/$', views.index),  # 添加 index 、路径配置
    path(r'^login_action/$',views.login_action),  # 处理登录请求
    path(r'^event_manage/$',views.event_manage)  # 处理登录请求
]

报错 : 

 关于django中path和url函数的使用介绍

关于django中path和url函数的使用介绍_django path-CSDN博客

#from django.urls import url
from django.contrib import admin
from django.urls import path
from sign import views

urlpatterns = [
    path('admin/',  admin.site.urls),
    path('index/', views.index),  # 添加 index 、路径配置
    path('login_action/',views.login_action),  # 处理登录请求
    path('event_manage/',views.event_manage)  # 处理登录请求
]

path() 函数是 Django 2.0 版本引入的新函数,它更加直观和易用,支持使用 str 类型的路由,可以通过 , 等转换器来定义动态参数,而且不再需要使用正则表达式来匹配 URL,大大简化了 URL 配置的过程。

url() 函数是 Django 1.x 版本中用于 URL 配置的函数,它的语法和 path() 不同,需要使用正则表达式来匹配 URL。

输入 admin    admin123456

http://127.0.0.1:8000/admin/

 add 添加用户 

user1    user123456

退出,用user1 进入

登录失败 ;

 修改成密码为user12345678  登录成功 : 

 

from django.shortcuts import render
from django.contrib import  auth

# Create your views here.
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseRedirect


# 定义inex 函数,通过HttpResponse 类向客户端返回字符创
def index(request):
    # return HttpResponse("Hello Django!")  # 使用Django 的render函数
    return render(request, "index.html")


def login_action(request):
    if request.method == "POST":
        username = request.POST.get('username', "")  # 字段对应表单的input属性
        password = request.POST.get('password', '')
        # 使用authenticate 函数认证处的用户名和密码。它接受两个参数
        #并且会在用户名密码正确的情况下返回一个user 对象否则autenticate() 返回None
        user=auth.authenticate(username=username,password=password)
        print(f"user:{user}")
        if  user is not None:
            response = HttpResponseRedirect('/event_manage/')  # 重定向
            auth.login(request,user)# 登录

            request.session['user'] = username  # 将session 信息记录到浏览器

            #request.session['user'] = username  # 将session 信息记录到浏览器
            return response
        # if username == 'admin' and password == "admin123":
        #
        #     # return HttpResponse('login success')
        #     response= HttpResponseRedirect('/event_manage/')  # 重定向
        #     #response.set_cookie('user',username,3600)  # 添加浏览器
        #     request.session['user']=username # 将session 信息记录到浏览器
        #     return response
        else:
            return render(request, "index.html", {'error': 'username or password error!'})


# 发布会管理

def event_manage(request):
    #username=request.COOKIES.get("user","")# 读取浏览器cookie
    username=request.session.get("user","") # 读取浏览器session
    return render(request, "event_manage.html",{"user":username})

 

@login_required

sign/views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.contrib import  auth

# Create your views here.
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseRedirect


# 定义inex 函数,通过HttpResponse 类向客户端返回字符创
def index(request):
    # return HttpResponse("Hello Django!")  # 使用Django 的render函数
    return render(request, "index.html")


def login_action(request):
    if request.method == "POST":
        username = request.POST.get('username', "")  # 字段对应表单的input属性
        password = request.POST.get('password', '')
        # 使用authenticate 函数认证处的用户名和密码。它接受两个参数
        #并且会在用户名密码正确的情况下返回一个user 对象否则autenticate() 返回None
        user=auth.authenticate(username=username,password=password)
        print(f"user:{user}")
        if  user is not None:
            response = HttpResponseRedirect('/event_manage/')  # 重定向
            auth.login(request,user)# 登录

            request.session['user'] = username  # 将session 信息记录到浏览器

            #request.session['user'] = username  # 将session 信息记录到浏览器
            return response
        # if username == 'admin' and password == "admin123":
        #
        #     # return HttpResponse('login success')
        #     response= HttpResponseRedirect('/event_manage/')  # 重定向
        #     #response.set_cookie('user',username,3600)  # 添加浏览器
        #     request.session['user']=username # 将session 信息记录到浏览器
        #     return response
        else:
            return render(request, "index.html", {'error': 'username or password error!'})


# 发布会管理
@login_required
def event_manage(request):
    #username=request.COOKIES.get("user","")# 读取浏览器cookie
    username=request.session.get("user","") # 读取浏览器session
    return render(request, "event_manage.html",{"user":username})

 清理缓存 

 直接访问

http://127.0.0.1:8000/event_manage/

 在访问被@login_reuqired 装饰的视图时,默认跳转的URL 中包含“acount/login/”。

修改.../urls.py 增加新的路径位置:

path('',views.index),
path('accounts/login/',views.index)

 跳转到 登录

#from django.urls import url
from django.contrib import admin
from django.urls import path
from sign import views

urlpatterns = [
    path('',views.index),
    path('admin/',  admin.site.urls),
    path('index/', views.index),  # 添加 index 、路径配置
    path('login_action/',views.login_action),  # 处理登录请求
    path('event_manage/',views.event_manage) , # 处理登录请求
    path('accounts/login/',views.index)
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

雷达编程实战之功耗优化技术(低功耗)

本篇文章以xWRL6432为例,首先介绍了芯片内部的电源管理框架,在产品业务处理流程的不同阶段,我们可以对不同电源域进行相应的开/关来降低功耗。然后介绍了不同的硬件电源参考设计对芯片功耗的影响,又着重介绍了线性调频脉冲相关参数…

1.2.C++项目:仿muduo库实现并发服务器之时间轮的设计

文章目录 一、为什么要设计时间轮?(一)简单的秒级定时任务实现:(二)Linux提供给我们的定时器:1.原型2.例子 二、时间轮(一)思想(一)代码 一、为什…

2023年显著性检测论文及代码汇总(3)

ACM MM Point-aware Interaction and CNN-induced Refinement Network for RGB-D Salient Object Detection code Abstacrt:近年来,CNN在特征提取和跨模态交互中得到了充分的利用,但在自模态和跨模态的全局远程依赖关系建模方面仍存在不足。…

二叉树的常见操作

二叉树的常见操作 注:二叉树的结构如下: typedef char BinaryTreeDataType; typedef struct BinaryTreeNode {struct BinaryTreeNode* left;struct BinaryTreeNode* right;BinaryTreeDataType data; }BTNode;以下所有操作都以下面的树为例:…

PHP8中final关键字的应用-PHP8知识详解

在PHP8中,final的中文含义是最终的、最后的意思。被final修饰过的类和方法就是“最终的版本”。 如果关键字final放在类的前面,则表示该类不能被继承。 如果关键字final放在方法的前面,则表示该 方法不能被重新定义。 如果有一个类的格式为…

ili9431液晶 tft_espi图形库演示 时钟、天气、滚动、气象图标

米思齐tft_spi模块库演示程序。心知天气、阿里云时钟、WiFi信号强度检测、1分钟滚屏、更新天气时间为15分钟、加入天气图标。更新天气次数。断网检测 。此程序为tft_eSPI图形库演示、如感觉好可以自行优化。 ili9431tft_espi库是用于ESP32和ESP8266芯片的TFT LCD驱动程序库&am…

C++基础_Day02

文章目录 四、流程控制语句4.1 选择结构4.1.1 if语句 4.1.2 三目运算符4.1.3 switch语句注意事项 4.1.4 if和switch的区别【CHAT】4.2 循环结构4.2.1 while循环语句4.2.2 do...while循环语句 4.2.3 for循环语句九九乘法表 4.3 跳转语句4.3.1 break语句4.3.2 continue语句4.3.3 …

京东优惠券哪里找到如何领取内部隐藏优惠券怎么使用京东优惠券?

京东优惠券是指通过草柴APP查询要购买京东商品的大额隐藏优惠券,找到后点击进入领取京东优惠券,然后再京东购物可享受领券更便宜的购物方式。 京东优惠券哪里领取内部隐藏优惠券怎么使用? 1、打开京东APP挑选要购买的商品,并点击…

C++简单实现AVL树

目录 一、AVL树的概念 二、AVL树的性质 三、AVL树节点的定义 四、AVL树的插入 4.1 parent的平衡因子为0 4.2 parent的平衡因子为1或-1 4.3 parent的平衡因子为2或-2 4.3.1 左单旋 4.3.2 右单旋 4.3.3 先左单旋再右单旋 4.3.4 先右单旋再左单旋 4.4 插入节点完整代码…

C++指针常量,常量指针以及, 引用和指针的区别

const修饰指针有三种情况 1. const修饰指针 --- 常量指针 2. const修饰常量 --- 指针常量 3. const即修饰指针,又修饰常量 c int main() {int a 10;int b 10;//const修饰的是指针,常量指针,指针指向可以改,指针指向的值不…

linux——进程间通信——管道

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——进程间通信——管道通信 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;进程间通信&#xff08;InterProcess Communication&…

Linux 文件上传、下载

1、通过FinalShell工具虚拟机进行数据交换 在FinalShell软件的下方窗体中&#xff0c;提供了Linux的文件系统视图&#xff0c;可以方便的&#xff1a; 浏览文件系统&#xff0c;找到合适的文件&#xff0c;右键点击下载&#xff0c;即可传输到本地电脑 浏览文件系统&#xff0…

密码技术 (5) - 数字签名

一. 前言 前面在介绍消息认证码时&#xff0c;我们知道消息认证码虽然可以确认消息的完整性&#xff0c;但是无法防止否认问题。而数字签名可以解决否认的问题&#xff0c;接下来介绍数字签名的原理。 二. 数字签名的原理 数字签名和公钥密码一样&#xff0c;也有公钥和私钥&am…

网站使用SSL证书是趋势吗?

随着互联网技术的不断发展&#xff0c;网络安全问题日益受到重视。其中&#xff0c;SSL证书作为网站安全的基石&#xff0c;其重要性不言而喻。SSL证书能够加密网站与用户之间的通信&#xff0c;保护用户隐私&#xff0c;防止信息被窃取和篡改。因此&#xff0c;越来越多的网站…

10.1作业

#include <stdio.h> #include <string.h> #include <stdlib.h> /** function:* 创建一个双向链表&#xff0c;将26个英文字母通过头插的方式插入&#xff0c;通过为尾删的方式读取并删除* param [ in] * param [out] * return */ typedef struct double…

ECharts多个数据视图进行自适应大小的解决方案

项目场景&#xff1a; 在制作数据视图时经常会遇到多个数据视图的情况&#xff0c;在多个数据视图的情况下做自适应是比较麻烦的&#xff0c;这里就详细的分析一下该如何去制作&#xff0c;分享一下我的解决办法及思路。 定义 DOM 容器 这里需要注意一个地方&#xff0c;在定…

《Jetpack Compose从入门到实战》第八章 Compose页面 导航

添加依赖&#xff1a;implementation “androidx.navigation:navigation-compose:$nav_version” Navigation for Compose class MainActivity : AppCompatActivity() {var theme: BloomTheme by mutableStateOf(BloomTheme.LIGHT)override fun onCreate(savedInstanceState:…

Vue3核心源码解析 (一) : 源码目录结构

通过软件框架阅读源码可以对框架本身运行机制进行学习&#xff0c;更能了解框架的API设计、原理及流程、设计思路&#xff1b;我们要知其然&#xff0c;更知其所以然。 Vue 3的源码相对于Vue 2版本有了较大程度的改变&#xff0c;采用Monorepo规范的目录结构&#xff0c;同时使…

JavaScript——APIs

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层

一、MapTool简介 在ArcGIS Pro SDK中&#xff0c;MapTool是一个重要的组件&#xff0c;用于自定义地图操作工具&#xff0c;使用户能够在ArcGIS Pro中执行特定的地图交互操作。 在VS中添加新项&#xff0c;可以找到ArcGIS Pro 地图工具&#xff0c;即为MapTool。 新建后打开c…