二、使用Django创建一个基础应用

news2024/11/23 10:21:03
职位管理系统 - 建模
  • 职位名称
  • 类别
  • 工作地点
  • 职位职责
  • 职位要求
  • 发布人
  • 发布日期
  • 修改日期
安装django
pip install django==5.0
查看django版本
python -m django --version
创建项目
django-admin startproject recruitment
启动服务
python manage.py runserver 0.0.0.0:8000
创建应用
 python .\manage.py startapp jobs

jobs表示关于职位管理的应用

生成迁移文件
python .\manage.py makemigrations
迁移数据
python .\manage.py migrate 
创建后台管理员账号
 python .\manage.py createsuperuser
创建模型
from datetime import datetime

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
JobTypes = [
    (0, "技术类"),
    (1, "产品类"),
    (2, "运营类"),
    (3, "设计类"),
]

Cities = [
    (0, "北京"),
    (1, "上海"),
    (2, "深圳"),
    (3, "西安"),
]


class Job(models.Model):
    job_type = models.SmallIntegerField(blank=False, choices=JobTypes, verbose_name="职位类别")
    job_name = models.CharField(max_length=250, blank=False, verbose_name="职位名称")
    job_city = models.SmallIntegerField(choices=Cities, blank=False, verbose_name="工作地点")
    job_responsibility = models.TextField(max_length=1024, verbose_name="职位职责")
    job_requirements = models.TextField(max_length=1024, blank=False, verbose_name="职位要求")
    creator = models.ForeignKey(User, verbose_name="创建人", null=True, on_delete=models.SET_NULL)
    created_date = models.DateTimeField(verbose_name="创建时间", default=datetime.now)
    modified_date = models.DateTimeField(verbose_name="修改时间", default=datetime.now)

注册模型
from django.contrib import admin

from jobs.models import Job

# Register your models here.
admin.site.register(Job)
注册应用

在settings.py INSTALLED_APPS下注册应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'jobs'
]
迁移模型
python .\manage.py makemigrations
python .\manage.py migrate 

快速迭代完善应用

设置Django Admin模型显示的字段
class JobAdmin(admin.ModelAdmin):
    list_display = ("job_name", "job_type", "job_city", "creator", "created_date", "modified_date")

admin.site.register(JobAdmin)
设置Django Admin新增/修改时不需要手动编辑的字段
class JobAdmin(admin.ModelAdmin):
    exclude = ("creator", "created_date", "modified_date")
admin.site.register(JobAdmin)
设置Django Admin创建/修改人为当前登录用户
class JobAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.creator = request.user
        super().save_model(request, obj, form, change)
admin.site.register(Job, JobAdmin)

image

添加自定义页面

  • 列表页时独立页面,使用自定义的页面
  • 添加如下页面
    • 职位列表页
    • 职位详情页
  • 匿名用户可以访问
职位列表展示

image

前端

{% extends 'base.html' %}
终于等到你,期待加入我们,用技术去探索一个新世界
{% if job_list %}
  <ul>
    {% for job in job_list %}
      <li>{{ job.type_name }} <a href="/job/{{ job.id }}">{{ job.job_name }}</a></li>
    {% endfor %}
  </ul>
{% else %}
  <p>No jobs are avaliable.</p>
{% endif %}

后端

from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponse
from django.template import loader


from jobs.models import (
    Job,
    Ciyies,
    JobTypes

)

  

# Create your views here.

def joblist(request: WSGIRequest):

    """职位列表页
    Args:
        request (_type_): WSGIRequest
    Returns:
        _type_: HttpResponse
    """
    job_list = Job.objects.order_by("job_type")
    template = loader.get_template("joblist.html")
    context = {"job_list": job_list}
    for job in job_list:
        job.city_name = Ciyies[job.job_city][1]
        job.job_type = JobTypes[job.job_type][1]
    return HttpResponse(template.render(context))
职位详情展示

image

前端

{% extends "base.html" %}

{% block content %}
<div style="margin:auto; width:50%">
{% if job %}
<div class="psition_name">
    <h2>岗位名称:{{ job.job_name }}</h2>
    城市:{{ job.city_name }}
</div>
<hr>
<div class="position_responsibility" style="width:100%">
    <h3>岗位职责:</h3>
    <pre style="font-size:16px">{{ job.job_responsibility }}</pre>
</div>
<hr>
<div class="position_requirement" style="width:100%">
    <h3>任职要求:</h3>
    <pre style="font-size:16px">{{ job.job_requirement }}</pre>
</div>
<hr>
<div class="apply_position">
    <input type="button" class="btn btn-danger" style="width:120px;" value="返回" onclick="location.href='/jobs/joblist'"/>
    <input type="button" class="btn btn-success" style="width:120px;" value="申请" onclick="location.href='/resume/add/?apply_position={{job.job_name}}&city={{job.city_name}}'"/>
</div>
{% endif %}
</div>
{% endblock %}

后端视图

def detail(request: WSGIRequest, job_id: int):

    """获取job详情
    Args:
        request (WSGIRequest): _description_
    """
    try:
        job: Job = Job.objects.get(pk=job_id)
        job.city_name = Ciyies[job.job_city][1]
    except Job.DoesNotExist:
        raise Http404()
    return render(request, "job.html", {"job": job})

url

path("job/<int:job_id>", views.detail, name="detail")

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

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

相关文章

web APIs总结(3)

1. 本地存储介绍&#xff08;重点&#xff09; 数据存储在用户浏览器中设置、读取方便、甚至页面刷新不丢失数据容量较大&#xff0c;sessionStorage和localStorage约 5M 左右 本地存储分类- localStorage 作用: 可以将数据永久存储在本地(用户的电脑), 除非手动删除&#x…

网络编程—— Http的Get请求

http: hyper text transport protocal:超文本传输协议。 http是一种基于客户端-服务器模式的协议(Client-Server)。它规定只能由客户端先发起请求给服务器&#xff0c; 服务器做出响应。 http数据传输以数据报文的形式进行&#xff0c; 客户端向服务器发起的请求叫做请求报文。…

burpsuite抓包响应报文乱码

1、响应报文中的中文信息乱码 2、解决办法 3、设置成功后重新发起请求

无线网络安全技术基础

无线网络安全技术基础 无线网络安全风险和隐患 随着无线网络技术广泛应用,其安全性越来越引起关注.无线网络的安全主要有访问控制和数据加密,访问控制保证机密数据只能由授权用户访问,而数据加密则要求发送的数据只能被授权用户所接受和使用。 无线网络在数据传输时以微波进…

七大医用耗材启动!如何用数屿医械查询医用耗材中标?

近日&#xff0c;国家医保局发布《关于加强区域协同做好2024年医药集中采购提质扩面的通知》&#xff0c;标志着我国医药集中采购进入新阶段&#xff0c;将实现更高效、更规范的采购模式。 医用耗材是指经药品监督管理部门批准使用的&#xff0c;在诊断、治疗、防护和康复等医疗…

AI代理的类型、优势及示例

AI 代理的类型、优势和示例 AI 代理是重塑商业动态的关键技术进步。了解这些代理的运作方式&#xff0c;发现它们的关键优势包括效率、可扩展性和成本效益。我们将探索代理的实例及它们在各领域的应用&#xff0c;为未来的人工智能趋势和对客户体验的影响铺平道路。 想象一支由…

基于粒子群算法优化的长短期记忆神经网络(PSO-LSTM)回归预测

粒子群算法优化的长短期记忆&#xff08;LSTM&#xff09;神经网络用于回归预测是一种结合了进化计算和深度学习的强大方法。 1. 背景介绍 LSTM神经网络 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;&#xff0c…

AS连接MUMU模拟器

1、下载安装并打开mumu模拟器 mumu模拟器要弄成开发者模式 点击几次这个版本号&#xff0c;会有提示的&#xff0c;变成开发者模式之后&#xff0c;再连接As 2、打开as 打开Terminal窗口 先要cd 进去自己安装的sdk的platform-tools目录下 cd D:\Android\SDK\platform-tools 尝…

拓展类型——枚举

枚举的作用 枚举通常用来约定某个变量的取值范围 使用字面量和联合类型也可以达到约束变量的作用&#xff0c;但是会有不方便的情况 使用字面量和联合类型约束变量的问题 逻辑含义和真实的值会产生混淆&#xff0c;如果修改了真实值&#xff0c;会造成大量代码需要修改 例&…

大猿人话费平台对接程序,仅支持Windows

1、基础参数 输入大猿人系统分配的相关信息&#xff0c;然后保存。 软件运行在左下角显示在平台的余额。 本软件仅会在本地保存您填写的数据。 且您填写的数据仅会在和您的服务器通讯&#xff0c;不会发往其他地方。 请妥善保存好您的数据。 使用本软件造成的一切和本软件…

618哪些好物值得入手?必备数码好物清单分享

618购物节又来了!一大波智能好物来袭!随着科技的日新月异&#xff0c;智能产品已成为我们生活中不可或缺的一部分&#xff0c;它们不仅炫酷&#xff0c;还能让你生活更便捷。想知道今年都有哪些黑科技新品吗?赶紧跟我们一起&#xff0c;我们将详细介绍这些热门好物。一堆超炫酷…

【学习笔记】后端(Ⅰ)—— NodeJS(Ⅰ)

NodeJS 1、概述 1.1、NodeJS是什么 1.2、NodeJS的主要作用 1.3、NodeJS的优点 1.4、NodeJS 与 浏览器 的 JavaScript 对比 1.4.1 ECMAScript 介绍 1.4.2 JavaScript 介绍 1.4.3 TypeScript 介绍2、基础篇 2.1、Buff…

【Python脚本随手笔记】-- 将 “庆余年2” 等信息写入 Txt 文件中

&#x1f48c; 所属专栏&#xff1a;【Python脚本随手笔记】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

Gerchberg-Saxton (GS) 和混合输入输出(Hybrid Input-Output, HIO)算法

文章目录 1. 简介2. 算法描述3. 混合输入输出&#xff08;Hybrid Input-Output, HIO&#xff09;算法3.1 HIO算法步骤3.2 HIO算法的优势3.3 算法描述 4. 算法实现与对比5. 总结参考文献 1. 简介 Gerchberg-Saxton (GS) 算法是一种常用于相位恢复和光学成像的迭代算法。该算法最…

深度学习-转置卷积

转置卷积 转置卷积&#xff08;Transposed Convolution&#xff09;&#xff0c;也被称为反卷积&#xff08;Deconvolution&#xff09;&#xff0c;是深度学习中的一种操作&#xff0c;特别是在卷积神经网络&#xff08;CNN&#xff09;中。它可以将一个低维度的特征图&#x…

shell快捷命令与正则表达式

一.高效快捷命令 1.快捷排序——sort 以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出。 语法格式 sort [选项] 参数 cat file | sort 选项 -n 按照数…

LeetCode-102. 二叉树的层序遍历【树 广度优先搜索 二叉树】

LeetCode-102. 二叉树的层序遍历【树 广度优先搜索 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;一个全局队列queue&#xff0c;while queue&#xff1a;去搜集当前所有queue的level解题思路二&#xff1a;背诵版解题思路三&#xff1a; 题目描述&#xff1a; 给你二…

modelbox验证expand和condition共用后,是否顺序保持

如图&#xff0c;在expand之后接了个condition&#xff0c;上下两个流中每一对数据buffer的顺序性是否还会保持&#xff1f; 笔者修改让condition在遇到奇数和偶数时的走向不同。 然后在response单元输出每一对数据&#xff0c;发现顺序都不变。且在处理时&#xff0c;输出会卡…

文件系统--inode

文章目录 概述认识磁盘了解磁盘的存储结构对磁盘的存储结构进行逻辑抽象 操作系统对磁盘的使用宏观认识细节认识再谈目录再谈文件的增删 概述 文件有很多&#xff0c;但是被打开的文件很少&#xff0c;这些没有被打开的文件在磁盘中&#xff0c;这就叫做磁盘文件。每次先打开一…

用眼某星的名片识别与手工录入名片数据的效率及效果对比

OCR名片识别技术&#xff0c;作为现代信息处理领域的一项创新技术&#xff0c;已经逐渐取代了传统的名片管理方式&#xff0c;成为商务人士不可或缺的工具。本文将从OCR名片识别的特点与优势出发&#xff0c;详细阐述其相较于传统人工处理名片的显著差别&#xff0c;并揭示其在…