Django入门

前言

早就想入门后端了,自己倒是用过Flask,对于常规网站来说Django更完善一些。稍微学习下,能够做一些简单业务处理就好啦。

跟着官方文档学习的,这里做一下记录。纯纯拿来用,不去研究原理与架构,无脑跟着做就行了!

操作

安装

pip install django

新建项目

django-admin startproject mysite

启动项目

python manage.py runserver

或者指定端口号和host:
需要在配置文件中配置允许的host

# settings.py
ALLOWED_HOSTS = ["0.0.0.0"]
python manage.py runserver 0.0.0.0:8000
python manage.py runserver 8080

新建应用

在项目下新建一个应用:

python manage.py startapp polls

在应用里添加视图:

# polls/views.pyfrom django.http import HttpResponse
def index(request):return HttpResponse("Hello, world. You're at the polls index.")

新建应用url配置文件:

# /polls/urls.py
from django.urls import pathfrom . import viewsurlpatterns = [path('', views.index, name='index'),
]

将应用的url配置包含到项目url配置中

# mysite/urls.py
from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('polls/', include('polls.urls')),
]

这时跑起来访问下面的地址就能看到第一个页面了

http://127.0.0.1:8000/polls/

数据库

在以下文件中配置,该文件还有很多其他配置功能。

 mysite/settings.py

要求不高的话,直接使用python自带sqlite即可。Django默认也是使用sqlite。所以不需要修改。

执行以下代码生效

python manage.py migrate

数据模型

然后建立需要的数据模型

#  polls/models.py
from django.db import modelsclass Question(models.Model):question_text = models.CharField(max_length=200)pub_date = models.DateTimeField('date published')def __str__(self):return self.question_text# 这里可以根据业务为模型自定义方法 def was_published_recently(self):return self.pub_date >= timezone.now() - datetime.timedelta(days=1)class Choice(models.Model):question = models.ForeignKey(Question, on_delete=models.CASCADE)choice_text = models.CharField(max_length=200)votes = models.IntegerField(default=0)def __str__(self):return self.choice_text

建立好数据模型以后Django可以帮助我们生成建表语句和操作数据库的API。不过要先把应用的配置文件包含进项目配置文件。

# 修改mysite/settings.py
INSTALLED_APPS = ['polls.apps.PollsConfig','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]

最后执行以下命令,完成以后数据库就创建好了!

python manage.py makemigrations polls
python manage.py migrate

管理员页面

Django自带一个管理员页面,使用方法如下:

新建账号:

 python manage.py createsuperuser

页面是http://127.0.0.1:8000/admin/ 账号就是上面自己创建的。

只要在admin.py文件里面将模型注册一下,就可以用页面管理模型啦。在页面上新加问题

from .models import Questionadmin.site.register(Question)

完善视图

接下来就可以继续根据业务需求完善接口了

# views.py
def question(request):latest_question_list = Question.objects.order_by('-pub_date')[:5]output = ', '.join([q.question_text for q in latest_question_list])return HttpResponse(output)def detail(request,question_id):question_detail = get_object_or_404(Question, pk=question_id)return HttpResponse(question_detail)
# urls.py
urlpatterns = [path('', views.index, name='index'),path('q', views.question, name='question'),path('<int:question_id>', views.detail, name='q_d')
]

图片访问

第一种

# settings.pySTATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR, "static")
]

图片放入项目文件夹如1.png,访问 http://0.0.0.0:8000/static/1.png即可

第二种

# settings.pyMEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# urls.py
from . import settings
from django.views.static import serveurlpatterns = [path('admin/', admin.site.urls),path('autojs/', include('autojs.urls')),# 设置图片访问路径path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
]

访问http://0.0.0.0:8000/media/1.png即可

上传文件

创建模型,如果按照上面的方法设置了

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

则下面的代码会上传项目根目录下的 /media/files 目录下

# modles.py
class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()file = models.FileField(upload_to='files')def __str__(self):return self.title

注册一下,方便在后台管理修改内容

# Register your models here.
from .models import Record ,Article
#创建后台用户 python3 manage.py createsuperuser
admin.site.register(Record)
admin.site.register(Article)

登录后台看下修改或者上传文件即可:
在这里插入图片描述

模板

使用模板的话,要熟悉模的语法,自己些简单的页面可能会用到。正经项目还是用react或者vue前端框架吧。

首先项目根目录下新建一个templates文件夹,在settings.py注册模板目录:

# settings.py
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates',# 'DIRS': [],'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 修改这里'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

写一个简单的模板放到templates下:

hello.html:
<h1>{{ hello }}</h1>

urls.py添加路由:

path('hello', views.hello_template, name='hello')

views.py 添加视图

def hello_template(request):context          = {}context['hello'] = 'Hello World!'return render(request, 'hello.html', context)

访问就可以看到效果

更多的模板语法

包括列表,过滤,循环,判断等在此不一一列举。

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

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

相关文章

17 | 从后端到前端:微服务后,前端如何设计?

微服务架构通常采用前后端分离的设计方式。作为企业级的中台&#xff0c;在完成单体应用拆分和微服务建设后&#xff0c;前端项目团队会同时面对多个中台微服务项目团队&#xff0c;这时候的前端人员就犹如维修电工一样了。 面对如此多的微服务暴露出来的 API 服务&#xff0c…

记一次从溯源分析到云服务器接管

起因是我这个臭运维的在给客户做常态化的溯源分析&#xff0c;好巧不巧发现了一个IP扔到奇安信威胁情报平台看一下&#xff0c;发现部署了大量的服务&#xff0c;且为阿里云服务器。 看到这里&#xff0c;我大胆的推测&#xff0c;云上的信息中心&#xff0c;客户花点钱&#x…

【产品设计】通用后台管理系统需求及原型设计

后台管理系统&#xff0c;会根据不同公司、不同业务的要求做出改变。 网上很多系统的参考多数为业务中台&#xff0c;过于带有业务色彩。做过三四个后台管理系统&#xff0c;从中总结了一个通用的功能和需求设计模版&#xff0c;供大家参考。本文适用于0-2岁的产品经理做基础功…

JVM中类加载的过程

文章目录 一、类加载是什么二、类加载过程1.加载2.验证3.准备4.解析5.初始化 三、什么时候进行类加载四、双亲委派模型1.三大类加载器2.加载过程 总 一、类加载是什么 把.class文件加载到内存中&#xff0c;得到类对象的过程。 二、类加载过程 1.加载 找到.class文件&#xff…

【问题解决】VSCode 远程安装插件特别慢

【问题描述】 我要配置 VSCode WSL 的开发环境&#xff0c;需要在 WSL 里也装上 C、CMake 系列的插件&#xff0c;如下图的直接下载方式特别慢&#xff1a; 【解决方法】 先去网站下载插件&#xff1a;https://marketplace.visualstudio.com/&#xff0c;后缀名&#xff1a;…

算法训练营第四十一天||● 343. 整数拆分 96.不同的二叉搜索树

● 343. 整数拆分 这道有难度&#xff0c;不看题解肯定 想不到用动态规划&#xff0c;看了题解后能大概明白&#xff0c;但还不是很清晰&#xff0c;不太明白递推公式中强调的与dp[i]还要比较一次&#xff0c;也不明白第一次去最大最的那个比较 需要后面继续看 动规五部曲&a…

无涯教程-Javascript - Switch语句

从JavaScript 1.2开始&#xff0c;您可以使用 switch 语句来处理这种情况&#xff0c;它比重复的 if ... else if 语句更有效。 流程图 以下流程图说明了switch-case语句的工作原理。 switch 语句的目的是给出一个要求值的表达式&#xff0c;并根据表达式的值执行多个不同的语…

酷开科技大屏营销,撬动营销新增量

5G、人工智能、元宇宙等技术的发展促使数字营销的内容、渠道、传播方式发生了一系列变化&#xff1b;存量竞争下&#xff0c;增长成为企业更加迫切、更具挑战的课题&#xff0c;品牌营销活动越来越围绕“生意增长”和“提效转化”的目标展开。 如今的市场环境下&#xff0c;产…

PID算法

PID&#xff0c;就是“比例&#xff08;proportional&#xff09;、积分&#xff08;integral&#xff09;、微分&#xff08;derivative&#xff09;”&#xff0c;是一种很常见的控制算法。 需要将一个物理量保持在稳定状态&#xff08;比如维持平衡&#xff0c;温度、转速的…

C#图片处理

查找图片所在位置 原理&#xff1a;使用OpenCvSharp对比查找小图片在大图片上的位置 private static System.Drawing.Point Find(Mat BackGround, Mat Identify, double threshold 0.8) {using (Mat res new Mat(BackGround.Rows - Identify.Rows 1, BackGround.Cols - Iden…

为什么项目可见性难以实现?该如何提高?

在项目和专业服务管理中&#xff0c;失败有时难以避免。沟通不足和需求定义不明确被认为是造成失败的最大原因&#xff0c;这意味着项目可见性和信息流动至关重要。 什么是项目可见性&#xff1f; 项目可见性是组织项目相关信息的方式&#xff0c;以便所有团队成员、项目经理…

LeetCode 75 第五题(345)反转字符串中的元音字母

题目: 示例: 分析: 给一个字符串,将里面的元音字母反转,并且保持非元音字母不变(包括顺序). 字符串反转类型的题,我们都可以使用双指针来解决:定义首尾指针,分别向中间靠拢,直到首尾指针都指向了元音字母,然后交换首尾指针所指的字母,如此不会影响到非元音字母,同时也将元音字…

pytest实现用例间参数传递的方式

pytest实现用例间参数传递的方式 一、通过conftest创建全局变量二、使用tmpdir_factory方法 我们在做接口自动化测试的时候&#xff0c;会经常遇到这种场景&#xff1a;接口A的返回结果中的某个字段&#xff0c;是接口B的某个字段的入参。如果是使用postman&#xff0c;那我们可…

CSS:给子元素设置了浮动,页面缩放的时候,子元素往下掉

前言 给子元素设置了浮动&#xff0c;页面缩放的时候&#xff0c;子元素往下掉 html代码&#xff1a; <div class"father"><div class"child1"></div><div class"child2"></div> </div>css代码 .child1…

Spring Batch之读数据库——JdbcCursorItemReader之使用框架提供的BeanPropertyRowMapper(三十六)

一、BeanPropertyRowMapper介绍 参考我的另一篇博客&#xff1a; Spring Batch之读数据库——JdbcCursorItemReader&#xff08;三十五&#xff09;_人……杰的博客-CSDN博客 二、项目实例 1.项目框架 2.代码实现 BatchMain.java: package com.xj.demo27;import org.spri…

中金:龙湖基本面稳健,股价超跌具备配置价值

恒大2.4万亿元的天量债务爆出后&#xff0c;让本就信心不足的房地产行业&#xff0c;越发雪上加霜&#xff0c;房企股价遭遇集体下挫&#xff0c;业内公认的万科、龙湖、保利、中海等“优等生”也不免被波及。多家证券机构提醒&#xff0c;行业预期降至冰点的情况下&#xff0c…

oc基本控件2

// // ViewController.m // OcDemoTest // // Created by Mac on 2023/7/14. //#import "ViewController.h"interface ViewController () // label property (weak, nonatomic) IBOutlet UIImageView *imageView; // Use of undeclared identifier // 全局propert…

创建型模式

创建型模式&#xff08;Creational Pattern&#xff09;关注对象的创建过程&#xff0c;是一类最常用的设计模式&#xff0c;在软件开发中应用非常广泛。创建型模式将对象的创建和使用分离&#xff0c;在使用对象时无须关心对象的创建细节&#xff0c;从而降低系统的耦合度&…

学堂在线数据结构(上)(2023春)邓俊辉 课后题

The reverse number of a sequence is defined as the total number of reversed pairs in the sequence, and the total number of element comparisons performed by the insertion sort in the list of size n is: 一个序列的逆序数定义为该序列中的逆序对总数&#xff0c;…

pandas 笔记:pivot_table 数据透视表\pivot

1 基本使用方法 pandas.pivot_table(data, valuesNone, indexNone, columnsNone, aggfuncmean, fill_valueNone, marginsFalse, dropnaTrue, margins_nameAll, observedFalse, sortTrue)2 主要参数 dataDataFramevalues要进行聚合的列index在数据透视表索引&#xff08;index…