嘉兴网站排名优化,在后台怎么做网站内链,房产经纪人如何做网站吸客,怎么看网站是什么程序做的目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言
像之前那个页面#xff0c;太过简陋#xff0c;而且一个完整… 目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言
像之前那个页面太过简陋而且一个完整的页面也不可能只用HttpResponse返回文本这就可以用django的模板语法模板语法相当于将前后端分离了前端专写页面写成一个html文件然后后端在视图函数中可以通过渲染render将前端的html文件渲染为HTTP响应。 app文件目录如下 app01 │ ├─migrations │ │ └─__pycache__ │ ├─static │ │ ├─css │ │ ├─img │ │ ├─js │ │ └─plugins │ ├─templates │ └─__pycache__ └─myproject └─__pycache__ static文件夹用来存放静态文件包括样式css图片img网页的js和插件plugins
而templayes是用来存放模板的一些编写的html文件通常存放于此
二、模板语法
模板语法如何实现呢其实很简单首先得创建一个html文件对网页进行设计然后在视图函数中进行返回即可。
新建html文件 此文件即可和前端联系起来可以在这儿简单写个页面
h2展示/h2配置路径
path(show/, views.show_1),在视图函数中返回该页面
def show_1(request):return render(request, show_1.html)返回页面是用的render第二个参数就是要显示的html文件
启动项目后显示了“展示”当然有前端基础的同学就可以尽情发挥设计一个更加完善的页面 基本功能
返回指定内容作为 HTTP 响应
渲染模板文件并返回包含动态内容的 HTTP 响应
返回一个 HTTP 重定向响应将用户跳转到另一个 URL
常用场景
用于返回简单的字符串、HTML 或其他内容
用于返回包含动态页面的完整 HTML 响应
用于重定向用户到其他页面如成功后的跳转
返回内容类型
文本、HTML、JSON 或其他任意内容
渲染后的 HTML 内容
重定向响应浏览器跳转到目标 URL
函数参数
内容如字符串或 HTML 代码
request、模板文件路径、上下文数据字典
URL 名称、URL 路径或视图名称
返回对象
HttpResponse 对象
HttpResponse 对象经过模板渲染的 HTML
HttpResponseRedirect 对象
三、传参
模板文件和视图函数可以进行相互传参主要通过 上下文数据Context 进行传递。以下是详细说明
1、视图函数到模板文件
视图函数传参到模板文件只需添加一个context参数即可并返回context数据可包括一般的数据类型字符串、数字、布尔值等也可传一些储存数据的结构比如列表、字典等等.
记得在render渲染器中加入context参数
def show_1(request):list [1,2,3,4,5]dict {name:zhang,age:23,from:China}context {name:小谭,age:18,ishandsome:True,list:list,dict:dict}return render(request, show_1.html, context)在模板文件中接收到的参数可用{{ }}显示到页面上字典用key值索引列表用整数索引取值,对于列表和字典的循环索引可以使用模板文件中的for循环。
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
h2展示/h2
h2姓名:{{name}},年龄:{{age}},帅不帅?{{ishandsome}}的/h2
div{% for item in list %}h1{{item}}/h1{% endfor %}
/divul{% for k,v in dict.items %}li{{k}}{{v}}/li{% endfor %}
/ul
/body
/html页面结果 2、模板文件到视图函数
在定义视图函数时的参数requests其实是一个对象内容包括用户发送网络请求后的一些信息比如用户填写的表单等等。
这里我们新配置一个登录的url进行演示
#添加路径
path(login/, views.login),#定义视图函数
def login(request):return render(request, login.html)写一个简单的表单
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
h1用户登录/h1
form action/login/ methodpost#{% csrf_token %}input typetext nameuser placeholder用户名input typepassword namepwd placeholder密码input typesubmit value提交/
/form
/body
/html启动项目,随便输入一点数据 提交后会出现如下错误 这是django独有的安全检测解决方法也很简单只需在代码块中添加这个:
{% csrf_token %}加了之后右键检查网页源代码或按F12发现表单中多了一长串value这一串码是django内部用来校验是否是正常我的网页发过来的django会自动读取这样就可以跳过django的安全检测。 在视图函数中编写代码以接收并测试传送数据因为是表单提交所以是POST请求
def login(request):if request.method POST:print(request.POST)return render(request, login.html)在网页中输入数据并提交发现控制台会打印出刚才表单输入的数据这其实就是requests请求的参数。 还可以通过取值获取到这些具体的参数
username request.POST[user]
password request.POST[pwd]四、引入静态文件
之前讲过一般只需要创建一个应用app但如果创建了多个应用不可能每个应用创建一个templates一般是整个Django项目共用一个templates所以会在settings文件中进行配置以让所有应用能共用templates。
在settings文件的大概58行加入
DIRS: [os.path.join(BASE_DIR, templates)],别忘了在前面引入os库
os.path.join(BASE_DIR, templates) 的作用是将 BASE_DIR项目的根目录与 templates 子目录拼接成一个绝对路径告诉 Django 从这个文件夹中寻找模板文件。
静态文件的介绍和一般存放位置前面已经讲了现在来讲讲静态文件在页面中的引用
前端写好的文件和一些img之类的可以应用到模板中。
如果是像我之前那样在控制台输入指令新建的Django文件则用不了{% static %} 标签。但可以用文件的相对路径。
img src/static/img/picture_1.jpg alt
link relstylesheet hrefstatic/css/styles.css
script src/static/js/jquery-3.6.0.min.js/script
script src/static/plugins/bootstrap-3.4.1/js/bootstrap.js/script若是在Pycharm中创建的Django可以使用{% static %} 标签引入静态文件
先在模板文件的顶部加入{% load static %}
引入 CSS 文件
link relstylesheet href{% static css/styles.css %}引入 JS 文件
script src{% static js/scripts.js %}/script引入图片
img src{% static img/logo.png %} altLogo引入其他静态资源
对于插件或 TypeScript 文件
script src{% static plugins/plugin.js %}/script
script src{% static ts/script.ts %}/script但是用这个语法要用Pycharm创建Django项目而且需要用专业版的Pycharm不然会有报错大家有专业版的可以用这种语法社区版的就还是用上面的文件的相对路径引入即可。 五、请求与响应
1、请求
用户发送请求一般分为GET 请求和POST 请求GET 和 POST 是 HTTP 的两种请求方法GET 用于从服务器获取数据参数通过 URL 传递易被缓存适合传递少量、非敏感数据POST 用于向服务器提交数据参数通过请求体传递适合提交表单或大数据且更安全。GET 请求参数可见长度有限且幂等POST 参数不可见无长度限制通常会修改服务器状态不具幂等性。GET 常用于查询操作POST 常用于提交数据或更新操作。
查询请求的方式
requests.method就对于前面写的表单在控制台打印请求就是POST请求 获取请求的方式
request.POST结果是一个对象用来获取客户端通过 POST 请求 提交的数据。它是一个类似字典的对象包含了所有通过 POST 方法提交的表单数据通常是键值对的形式。
request.GET是 Django 中用于获取通过 GET 请求 提交的查询参数的一个对象。它是一个类似字典的对象包含了客户端通过 URL 查询字符串传递的所有参数。
2、响应
像上面介绍的render还有之前的HttpResponse还有一个redirect重定向都是经常用到的视图响应函数 的工具
redirect重定向是用户发送请求后直接跳转到另外的网址比如百度官网之类的编写方式如下
return redirect(https://blog.csdn.net/2403_83182682?typeblog)第一个参数就是要跳转的网址
三个响应函数的区别如下
基本功能
返回指定内容作为 HTTP 响应
渲染模板文件并返回包含动态内容的 HTTP 响应
返回一个 HTTP 重定向响应将用户跳转到另一个 URL
常用场景
用于返回简单的字符串、HTML 或其他内容
用于返回包含动态页面的完整 HTML 响应
用于重定向用户到其他页面如成功后的跳转
返回内容类型
文本、HTML、JSON 或其他任意内容
渲染后的 HTML 内容
重定向响应浏览器跳转到目标 URL
函数参数
内容如字符串或 HTML 代码
request、模板文件路径、上下文数据字典
URL 名称、URL 路径或视图名称
返回对象
HttpResponse 对象
HttpResponse 对象经过模板渲染的 HTML
HttpResponseRedirect 对象
适用场景示例
返回简单消息或 API 响应HttpResponse(Hello)
返回渲染的页面render(request, index.html)
用户登录后跳转redirect(dashboard)
六、综合小案例
经过前面的学习详细您对Django以及有了一定的了解下面进行一个小案例。
需求是定义一个登录页面用户名或密码输出会提示正确则跳转到一个url内容是所爬取的豆瓣电影排行前25。
可以就在之前的login上修改修改就行
1、源码展示
视图函数
def login(request):# 豆瓣电影前25排行headers {user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1 Edg/131.0.0.0}response requests.get(https://movie.douban.com/top250, timeout10, headersheaders)response response.textresp re.findall(rspan classtitle(?!.*nbsp;)(?Pname.*?)/span, response)if request.method POST:print(request.method)print(request.POST)username request.POST[user]password request.POST[pwd]context {name:username,password:password,resp:resp}if username edward and password 1234:return render(request, douban.html,context)else:# error_msg 登录失败返回信息return render(request, login.html, {error_msg: 用户名或密码错误})return render(request, login.html)登录页面
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlestylebody {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;flex-direction: column;text-align: center;}/* 调整图片大小 */img {width: 200px;height: auto;}input[typetext], input[typepassword], input[typesubmit] {font-size: 18px;padding: 10px;margin: 10px 0;width: 25%;box-sizing: border-box;}input[typesubmit] {background-color: #4CAF50;color: white;border: none;cursor: pointer;}input[typesubmit]:hover {background-color: #45a049;}span {font-size: 8px;color: red;}/style
/head
body
h1用户登录/h1
form action/login/ methodpost{% csrf_token %}input typetext nameuser placeholder用户名input typepassword namepwd placeholder密码input typesubmit value提交/!--只有当error_msg存在时才显示错误信息--{% if error_msg %}span stylecolor: red{{ error_msg }}/span{% endif %}
/form
img src/static/img/picture_1.jpg alt/body
/html显示电影排行页面
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
h1豆瓣Top25/h1
div豆瓣电影前25榜单:/div
ul{% for item in resp%}li{{item}}/li{% endfor %}
/ul
div{{response}}/div
/body
/html2、注意事项以及部分解释
注意视图函数用了requests请求以及re解析需在前面引入
import re
import requests下面这段是关于网络爬虫的有基础的可以看看没基础的直接复制就行。
headers {user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1 Edg/131.0.0.0}response requests.get(https://movie.douban.com/top250, timeout10, headersheaders)response response.textresp re.findall(rspan classtitle(?!.*nbsp;)(?Pname.*?)/span, response)这里的用户名和密码是自己设置的一般来说用户名和密码是不会出现在代码中的容易泄露可以存放于数据库中但我图方便就先这样了后面再出一个完整的Django和Mysql连接的博客。
if username edward and password 1234:return render(request, douban.html,context)html页面做得比较简洁有前端基础的同学可以试着改改使页面更加美观。
3、展示
初始界面 用户名或密码输入错误提示错误 成功登录显示排行榜 感谢大家的三连我会尽快更新的