Django框架的全面指南:从入门到高级
Django框架的全面指南:从入门到高级
目录
- 引言
- Django简介
- 安装与配置
- 创建第一个Django项目
- Django的MVT架构
- 模型(Model)
- 视图(View)
- 模板(Template)
- URL路由
- 表单处理
- 用户认证与权限
- Django Admin
- 高级主题
- 总结
引言
Django是一个高级Python Web框架,它鼓励快速开发和干净、实用的设计。Django遵循“Don’t Repeat Yourself”(DRY)原则,旨在帮助开发者快速构建复杂的、数据库驱动的网站。无论你是初学者还是经验丰富的开发者,Django都能为你提供强大的工具和功能,帮助你高效地完成项目。
本文将带你从Django的基础知识开始,逐步深入到高级主题,涵盖模型、视图、模板、URL路由、表单处理、用户认证、Django Admin等内容。我们还将通过示例代码和案例来帮助你更好地理解和应用这些概念。
Django简介
Django最初是由Adrian Holovaty和Simon Willison在2003年开发的,目的是为了简化新闻网站的创建过程。自2005年发布以来,Django已经成为最受欢迎的Python Web框架之一。它被广泛应用于各种类型的项目,从小型博客到大型企业级应用。
Django的主要特点包括:
- 快速开发:Django提供了许多内置功能,如ORM、模板引擎、表单处理等,使得开发者可以快速构建应用。
- 安全性:Django内置了许多安全功能,如防止SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
- 可扩展性:Django的设计允许开发者轻松地扩展和定制框架的功能。
- 社区支持:Django拥有一个活跃的社区,提供了大量的文档、教程和第三方库。
安装与配置
在开始使用Django之前,你需要先安装它。Django可以通过Python的包管理工具pip来安装。
安装Django
打开终端或命令提示符,运行以下命令来安装Django:
pip install django
安装完成后,你可以通过以下命令来验证Django是否安装成功:
django-admin --version
如果安装成功,你将看到Django的版本号。
创建Django项目
安装完成后,你可以使用django-admin命令来创建一个新的Django项目。假设我们要创建一个名为myproject的项目,可以运行以下命令:
django-admin startproject myproject
这将创建一个名为myproject的目录,其中包含Django项目的基本结构。
运行开发服务器
进入项目目录并启动开发服务器:
cd myproject
python manage.py runserver
默认情况下,开发服务器将在http://127.0.0.1:8000/上运行。打开浏览器并访问该地址,你将看到Django的欢迎页面。
创建第一个Django项目
项目结构
在创建了Django项目后,你会看到以下目录结构:
myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.py
manage.py:一个命令行工具,用于与Django项目进行交互。myproject/:项目的实际Python包。settings.py:项目的配置文件。urls.py:项目的URL路由配置。wsgi.py:用于部署项目的WSGI配置。asgi.py:用于部署项目的ASGI配置。
创建应用
Django项目由多个应用(apps)组成。每个应用都是一个独立的模块,负责处理特定的功能。我们可以使用manage.py来创建一个新的应用。
假设我们要创建一个名为blog的应用,可以运行以下命令:
python manage.py startapp blog
这将创建一个名为blog的目录,其中包含应用的基本结构。
注册应用
创建应用后,我们需要将其添加到项目的INSTALLED_APPS设置中。打开myproject/settings.py文件,找到INSTALLED_APPS列表,并添加blog应用:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blog', # 添加blog应用
]
Django的MVT架构
Django遵循MVT(Model-View-Template)架构模式,这与传统的MVC(Model-View-Controller)模式类似。MVT架构将应用程序分为三个主要部分:
- Model:负责处理与数据库的交互,定义数据结构。
- View:负责处理业务逻辑,接收请求并返回响应。
- Template:负责处理用户界面的呈现,生成HTML页面。
MVT工作流程
- 请求到达:用户通过浏览器发送请求到Django应用。
- URL路由:Django根据URL路由配置将请求分发到相应的视图。
- 视图处理:视图处理请求,可能会与模型交互以获取数据。
- 模板渲染:视图将数据传递给模板,模板生成HTML页面。
- 响应返回:Django将生成的HTML页面作为响应返回给用户。
模型(Model)
模型是Django中与数据库交互的核心部分。每个模型类对应数据库中的一张表,模型类的属性对应表中的字段。
创建模型
假设我们要创建一个简单的博客应用,其中包含Post模型来表示博客文章。打开blog/models.py文件,并添加以下代码:
from django.db import modelsclass Post(models.Model):title = models.CharField(max_length=200)content = models.TextField()pub_date = models.DateTimeField(auto_now_add=True)def __str__(self):return self.title
在这个例子中,我们定义了一个Post模型,它有三个字段:
title:文章的标题,类型为CharField,最大长度为200个字符。content:文章的内容,类型为TextField,可以存储大量文本。pub_date:文章的发布日期,类型为DateTimeField,auto_now_add=True表示在创建对象时自动设置为当前时间。
迁移数据库
在定义模型后,我们需要将其应用到数据库中。Django使用迁移(migration)来管理数据库模式的变化。运行以下命令来创建并应用迁移:
python manage.py makemigrations
python manage.py migrate
makemigrations命令会生成迁移文件,migrate命令会将迁移应用到数据库中。
使用Django Shell操作模型
Django提供了一个交互式的Python shell,可以方便地操作模型。运行以下命令启动Django shell:
python manage.py shell
在shell中,你可以创建、查询、更新和删除模型对象。例如:
from blog.models import Post# 创建一篇新文章
post = Post(title="我的第一篇博客", content="这是博客的内容。")
post.save()# 查询所有文章
posts = Post.objects.all()
for post in posts:print(post.title, post.pub_date)# 更新文章
post.title = "更新后的标题"
post.save()# 删除文章
post.delete()
视图(View)
视图是Django中处理业务逻辑的部分。它接收HTTP请求并返回HTTP响应。视图可以是函数或类。
函数视图
最简单的视图是函数视图。打开blog/views.py文件,并添加以下代码:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Postdef index(request):posts = Post.objects.all()return render(request, 'blog/index.html', {'posts': posts})def post_detail(request, post_id):post = Post.objects.get(id=post_id)return render(request, 'blog/post_detail.html', {'post': post})
在这个例子中,我们定义了两个视图函数:
index:显示所有博客文章的列表。post_detail:显示单篇博客文章的详细信息。
类视图
Django还提供了基于类的视图(Class-Based Views,CBV),它们比函数视图更灵活和强大。例如,我们可以使用ListView和DetailView来简化视图的编写:
from django.views.generic import ListView, DetailView
from .models import Postclass PostListView(ListView):model = Posttemplate_name = 'blog/index.html'context_object_name = 'posts'class PostDetailView(DetailView):model = Posttemplate_name = 'blog/post_detail.html'context_object_name = 'post'
URL路由
为了让视图能够处理请求,我们需要将其映射到URL。打开blog/urls.py文件(如果不存在,请创建它),并添加以下代码:
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('post/<int:post_id>/', views.post_detail, name='post_detail'),
]
然后,将blog应用的URL配置包含到项目的urls.py中:
from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('blog/', include('blog.urls')),
]
现在,你可以通过以下URL访问博客应用:
http://127.0.0.1:8000/blog/:显示所有博客文章的列表。http://127.0.0.1:8000/blog/post/1/:显示ID为1的博客文章的详细信息。
模板(Template)
模板是Django中用于生成HTML页面的部分。Django使用自己的模板语言(DTL)来动态生成内容。
创建模板
在blog应用目录下创建一个名为templates/blog/的目录,并在其中创建两个模板文件:index.html和post_detail.html。
index.html:
<!DOCTYPE html>
<html>
<head><title>博客首页</title>
</head>
<body><h1>博客文章列表</h1><ul>{% for post in posts %}<li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>{% endfor %}</ul>
</body>
</html>
post_detail.html:
<!DOCTYPE html>
<html>
<head><title>{{ post.title }}</title>
</head>
<body><h1>{{ post.title }}</h1><p>{{ post.content }}</p><p>发布日期:{{ post.pub_date }}</p>
</body>
</html>
模板继承
Django的模板系统支持模板继承,允许你创建一个基础模板,并在其他模板中扩展它。例如,我们可以创建一个基础模板base.html:
<!DOCTYPE html>
<html>
<head><title>{% block title %}我的博客{% endblock %}</title>
</head>
<body><header><h1>我的博客</h1></header><main>{% block content %}{% endblock %}</main><footer><p>© 2023 我的博客</p></footer>
</body>
</html>
然后,在index.html和post_detail.html中扩展基础模板:
index.html:
{% extends 'blog/base.html' %}{% block title %}博客首页{% endblock %}{% block content %}<h1>博客文章列表</h1><ul>{% for post in posts %}<li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>{% endfor %}</ul>
{% endblock %}
post_detail.html:
{% extends 'blog/base.html' %}{% block title %}{{ post.title }}{% endblock %}{% block content %}<h1>{{ post.title }}</h1><p>{{ post.content }}</p><p>发布日期:{{ post.pub_date }}</p>
{% endblock %}
表单处理
Django提供了强大的表单处理功能,可以轻松地创建和处理HTML表单。
创建表单
假设我们要创建一个表单,允许用户提交新的博客文章。首先,在blog/forms.py文件中定义一个表单类:
from django import forms
from .models import Postclass PostForm(forms.ModelForm):class Meta:model = Postfields = ['title', 'content']
处理表单提交
接下来,我们需要在视图中处理表单的提交。打开blog/views.py文件,并添加以下代码:
from django.shortcuts import render, redirect
from .forms import PostFormdef create_post(request):if request.method == 'POST':form = PostForm(request.POST)if form.is_valid():form.save()return redirect('index')else:form = PostForm()return render(request, 'blog/create_post.html', {'form': form})
创建模板
在templates/blog/目录下创建一个名为create_post.html的模板文件:
{% extends 'blog/base.html' %}{% block title %}创建新文章{% endblock %}{% block content %}<h1>创建新文章</h1><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">提交</button></form>
{% endblock %}
URL路由
最后,将create_post视图映射到URL。打开blog/urls.py文件,并添加以下代码:
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('post/<int:post_id>/', views.post_detail, name='post_detail'),path('create/', views.create_post, name='create_post'),
]
现在,你可以通过http://127.0.0.1:8000/blog/create/访问创建新文章的页面。
用户认证与权限
Django内置了用户认证系统,可以轻松地处理用户注册、登录、注销等功能。
用户注册
要允许用户注册,我们可以使用Django的UserCreationForm。打开blog/views.py文件,并添加以下代码:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import logindef register(request):if request.method == 'POST':form = UserCreationForm(request.POST)if form.is_valid():user = form.save()login(request, user)return redirect('index')else:form = UserCreationForm()return render(request, 'blog/register.html', {'form': form})
用户登录
Django提供了LoginView来处理用户登录。打开blog/urls.py文件,并添加以下代码:
from django.contrib.auth import views as auth_viewsurlpatterns = [path('', views.index, name='index'),path('post/<int:post_id>/', views.post_detail, name='post_detail'),path('create/', views.create_post, name='create_post'),path('register/', views.register, name='register'),path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]
用户权限
Django还提供了权限系统,允许你控制用户对特定资源的访问。例如,我们可以限制只有登录用户才能创建新文章:
from django.contrib.auth.decorators import login_required@login_required
def create_post(request):if request.method == 'POST':form = PostForm(request.POST)if form.is_valid():form.save()return redirect('index')else:form = PostForm()return render(request, 'blog/create_post.html', {'form': form})
Django Admin
Django自带了一个强大的管理界面,允许你轻松地管理数据库中的数据。
注册模型
要使用Django Admin管理Post模型,我们需要将其注册到Admin中。打开blog/admin.py文件,并添加以下代码:
from django.contrib import admin
from .models import Postadmin.site.register(Post)
访问Admin界面
启动开发服务器并访问http://127.0.0.1:8000/admin/,你将看到Django Admin的登录页面。使用超级用户账户登录后,你可以管理Post模型的数据。
自定义Admin界面
你可以通过自定义ModelAdmin类来定制Admin界面的显示和行为。例如:
from django.contrib import admin
from .models import Postclass PostAdmin(admin.ModelAdmin):list_display = ('title', 'pub_date')list_filter = ('pub_date',)search_fields = ('title', 'content')admin.site.register(Post, PostAdmin)
高级主题
中间件
Django的中间件是一个轻量级的插件系统,允许你在请求和响应的处理过程中插入自定义逻辑。你可以通过编写中间件类来实现全局的请求处理、响应处理、异常处理等功能。
信号
Django的信号系统允许你在某些事件发生时执行特定的操作。例如,你可以在保存模型对象时发送信号,并在信号处理函数中执行额外的逻辑。
缓存
Django提供了多种缓存后端,包括内存缓存、文件缓存、数据库缓存等。你可以通过配置缓存来提高应用的性能。
国际化
Django支持多语言应用,允许你轻松地将应用翻译成多种语言。你可以通过配置语言文件和使用翻译函数来实现国际化。
测试
Django内置了测试框架,允许你编写单元测试、集成测试和功能测试。你可以使用TestCase类来编写测试用例,并使用Client类来模拟HTTP请求。
总结
Django是一个功能强大且灵活的Web框架,适用于各种类型的项目。通过本文的介绍,你应该已经掌握了Django的基础知识,并能够开始构建自己的Web应用。随着你对Django的深入了解,你将发现它提供了许多高级功能和工具,可以帮助你更高效地开发和维护应用。
希望本文对你有所帮助,祝你在Django的学习和开发过程中取得成功!
相关文章:
Django框架的全面指南:从入门到高级
Django框架的全面指南:从入门到高级 目录 引言Django简介安装与配置创建第一个Django项目Django的MVT架构模型(Model)视图(View)模板(Template)URL路由表单处理用户认证与权限Django Admin高级…...
C基础寒假练习(8)
一、终端输入10个学生成绩,使用冒泡排序对学生成绩从低到高排序 #include <stdio.h> int main(int argc, const char *argv[]) {int arr[10]; // 定义一个长度为10的整型数组,用于存储学生成绩int len sizeof(arr) / sizeof(arr[0]); // 计算数组…...
Python爬虫:1药城店铺爬虫(完整代码)
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…...
Rust 变量特性:不可变、和常量的区别、 Shadowing
Rust 变量特性:不可变、和常量的区别、 Shadowing Rust 是一门以安全性和性能著称的系统编程语言,其变量系统设计独特且强大。本文将从三个角度介绍 Rust 变量的核心特性:可变性(Mutability)、变量与常量的区别&#…...
基于Springboot框架的学术期刊遴选服务-项目演示
项目介绍 本课程演示的是一款 基于Javaweb的水果超市管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附…...
方法一:将私钥存入环境变量,环境变量指什么//spring中,rsa私钥应该怎么处置
环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息或敏感数据(如密钥、密码等)。每个进程都可以访问一组环境变量,这些变量在操作系统级别定义,可以被应用程序读…...
React中useState()钩子和函数式组件底层渲染流程详解
useState()钩子底层渲染流程 React中useState的底层渲染机理。首先,我知道useState是React Hooks的一部分,用于在函数组件中添加状态。但底层是如何工作的呢?可能涉及到React的调度器、Fiber架构以及闭包等概念。 首先,React使用F…...
Cocos Creator 3.8 2D 游戏开发知识点整理
目录 Cocos Creator 3.8 2D 游戏开发知识点整理 1. Cocos Creator 3.8 概述 2. 2D 游戏核心组件 (1) 节点(Node)与组件(Component) (2) 渲染组件 (3) UI 组件 3. 动画系统 (1) 传统帧动画 (2) 动画编辑器 (3) Spine 和 …...
Java创建对象有几种方式?
大家好,我是锋哥。今天分享关于【Java创建对象有几种方式?】面试题。希望对大家有帮助; Java创建对象有几种方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Java 中,创建对象有几种常见的方式,具体如下&…...
R 字符串:深入理解与高效应用
R 字符串:深入理解与高效应用 引言 在R语言中,字符串是数据处理和编程中不可或缺的一部分。无论是数据清洗、数据转换还是数据分析,字符串的处理都是基础技能。本文将深入探讨R语言中的字符串概念,包括其基本操作、常见函数以及高效应用方法。 字符串基本概念 字符串定…...
基于Flask的全国星巴克门店可视化分析系统的设计与实现
【FLask】基于Flask的全国星巴克门店可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言,结合Flask框架进行后端开发&…...
pytorch实现半监督学习
人工智能例子汇总:AI常见的算法和例子-CSDN博客 半监督学习(Semi-Supervised Learning,SSL)结合了有监督学习和无监督学习的特点,通常用于部分数据有标签、部分数据无标签的场景。其主要步骤如下: 1. 数…...
Golang :用Redis构建高效灵活的应用程序
在当前的应用程序开发中,高效的数据存储和检索的必要性已经变得至关重要。Redis是一个快速的、开源的、内存中的数据结构存储,为各种应用场景提供了可靠的解决方案。在这个完整的指南中,我们将学习什么是Redis,通过Docker Compose…...
deepseek+vscode自动化测试脚本生成
近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享 安装AI ToolKit并启用Deepseek 微软官方提供了一个针对AI辅助的插件,也就是 AI Toolk…...
49【服务器介绍】
服务器和你的电脑可以说是一模一样的,只不过用途不一样,叫法就不一样了 物理服务器和云服务器的区别 整台设备眼睛能够看得到的,我们一般称之为物理服务器。所以物理服务器是比较贵的,不是每一个开发者都能够消费得起的。 …...
【大数据技术】Day07:本机DataGrip远程连接虚拟机MySQL/Hive
本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...
大语言模型的个性化综述 ——《Personalization of Large Language Models: A Survey》
摘要: 本文深入解读了论文“Personalization of Large Language Models: A Survey”,对大语言模型(LLMs)的个性化领域进行了全面剖析。通过详细阐述个性化的基础概念、分类体系、技术方法、评估指标以及应用实践,揭示了…...
[论文学习]Adaptively Perturbed Mirror Descent for Learning in Games
[论文学习]Adaptively Perturbed Mirror Descent for Learning in Games 前言概述前置知识和问题约定单调博弈(monotone game)Nash均衡和Gap函数文章问题定义Mirror Descent 方法评价 前言 文章链接 我们称集合是紧的,则集合满足࿱…...
大语言模型概述
一、主流大语言模型(LLMs) GPT系列(OpenAI) 基于Transformer解码器架构,以生成能力著称,代表产品包括ChatGPT(GPT-3.5/4),支持多轮对话、文本生成和复杂推理。其优势在于…...
【Unity踩坑】Unity项目管理员权限问题(Unity is running as administrator )
问题描述: 使用Unity Hub打开或新建项目时会有下面的提示。 解决方法: 打开“本地安全策略”: 在Windows搜索栏中输入secpol.msc并回车,或者从“运行”对话框(Win R,然后输入secpol.msc)启…...
深入理解Node.js_架构与最佳实践
1. 引言 1.1 什么是Node.js Node.js简介:Node.js是一个基于Chrome V8引擎的JavaScript运行时,用于构建快速、可扩展的网络应用。Node.js的历史背景和发展:Node.js最初由Ryan Dahl在2009年发布,旨在解决I/O密集型应用的性能问题。随着时间的推移,Node.js社区不断壮大,提供…...
一文讲解Java中的ArrayList和LinkedList
ArrayList和LinkedList有什么区别? ArrayList 是基于数组实现的,LinkedList 是基于链表实现的。 二者用途有什么不同? 多数情况下,ArrayList更利于查找,LinkedList更利于增删 由于 ArrayList 是基于数组实现的&#…...
使用 DeepSeek-R1 与 AnythingLLM 搭建本地知识库
一、下载地址Download Ollama on macOS 官方网站:Ollama 官方模型库:library 二、模型库搜索 deepseek r1 deepseek-r1:1.5b 私有化部署deepseek,模型库搜索 deepseek r1 运行cmd复制命令:ollama run deepseek-r1:1.5b 私有化…...
MapReduce分区
目录 1. MapReduce分区1.1 哈希分区1.2 自定义分区 2. 成绩分组2.1 Map2.2 Partition2.3 Reduce 3. 代码和结果3.1 pom.xml中依赖配置3.2 工具类util3.3 GroupScores3.4 结果 参考 本文引用的Apache Hadoop源代码基于Apache许可证 2.0,详情请参阅 Apache许可证2.0。…...
【Spring】Spring Cloud Alibaba 版本选择及项目搭建笔记
文章目录 前言1. 版本选择2. 集成 Nacos3. 服务间调用4. 集成 Sentinel5. 测试后记 前言 最近重新接触了 Spring Cloud 项目,为此参考多篇官方文档重新搭建一次项目,主要实践: 版本选择,包括 Spring Cloud Alibaba、Spring Clou…...
C语言实现统计字符串中不同ASCII字符个数
在C语言编程中,经常会遇到一些对字符串进行处理的需求,今天我们就来探讨如何统计给定字符串中ASCII码在0 - 127范围内不同字符的个数。这不仅是一个常见的算法问题,也有助于我们更好地理解C语言中数组和字符操作的相关知识。 问题描述 对于给…...
保姆级教程Docker部署Zookeeper官方镜像
目录 1、安装Docker及可视化工具 2、创建挂载目录 3、运行Zookeeper容器 4、Compose运行Zookeeper容器 5、查看Zookeeper运行状态 6、验证Zookeeper是否正常运行 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考:Ubuntu上安装 Docker及可视化管理…...
DeepSeek R1 简易指南:架构、本地部署和硬件要求
DeepSeek 团队近期发布的DeepSeek-R1技术论文展示了其在增强大语言模型推理能力方面的创新实践。该研究突破性地采用强化学习(Reinforcement Learning)作为核心训练范式,在不依赖大规模监督微调的前提下显著提升了模型的复杂问题求解能力。 技…...
Ollama教程:轻松上手本地大语言模型部署
Ollama教程:轻松上手本地大语言模型部署 在大语言模型(LLM)飞速发展的今天,越来越多的开发者希望能够在本地部署和使用这些模型,以便更好地控制数据隐私和计算资源。Ollama作为一个开源工具,旨在简化大语言…...
