Django后台项目开发实战八

news2024/11/16 17:37:00

 添加候选人提交简历功能

第八阶段

安装第三方注册包

pip install django-registration-redux

在 setting.py 注册,并添加配置

INSTALLED_APPS = [
    'grappelli',
    'registration',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'jobs',
    'interview'
]

REGISTRATION_OPEN = True   # 如果正确,可以注册
ACCOUNT_AUTHENTICATED_REGISTRATION_REDIRECTS = False    # 关闭认证重定向
ACCOUNT_ACTIVATION_DAYS = 7             # 保留一周的有效窗口
REGISTRATION_AUTO_LOGIN = True          # 如果正确,可以自动登录
LOGIN_REDIRECT_URL = '/'            # 正确的时候,带用户看到的页面
LOGIN_URL = '/accounts/login/'          # 用户想要登录的时候看到的页面

在 recruitment 的 urls.py 添加 path

urlpatterns = [
    path('',include("jobs.urls")),
    path('grappelli/',include('grappelli.urls')),
    path('accounts/',include('registration.backends.simple.urls')),
    path('admin/', admin.site.urls)
]

做数据库迁移

makemigrations
migrate

接下来访问 http://localhost:8000/accounts/register/ 就可以看到注册界面了

访问 http://localhost:8000/accounts/login/ 就可以看到登录界面了

现在你可以尝试创建一个用户!

接下来整合一下登录注册界面:

修改 base.html 文件为下:

<!-- base.html -->
<div style="text-align:center;">
    <h1 style = "margin: auto; width: 50%;">开放职位</h1>
</div>

{% block header %}
    <a href="/" style="text-decoration: none;color: #007bff">首页</a>
    <a href="/joblist" style="text-decoration: none;color: #007bff">职位列表</a>

    {% if user.is_authenticated %}
    <a href="/accounts/logout" style="text-decoration: none;color: #007bff">退出</a>
    {% else %}
    <a href="/accounts/login" style="text-decoration: none;color: #007bff">退出</a>
    {% endif %}

    {% if user.is_authenticated %}
    <p>终于等到你 {{ user.username }} ,期待加入我们,共同探索世界!</p>
    {% else %}
    <p>欢迎你,期待加入我们,登陆后可以投递简历</p>
    {% endif %}

{% endblock %}

<hr>

{% block content %}
{% endblock %}

修改 view.py 的 joblist 函数的返回值

def joblist(requset):
    ...
    #return HttpResponse(template.render(context))
    return render(requset,'joblist.html',context)

整合完毕的效果:

接下来我们要做的是:

 添加简历数据建模代码到 models.py 文件

from interview.models import DEGREE_TYPE
class Resume(models.Model):
    username = models.CharField(max_length=135,verbose_name='姓名')
    applicant=models.ForeignKey(User,verbose_name="申请人",null=True,on_delete=models.CASCADE)
    city=models.CharField(max_length=135,verbose_name='城市')
    phone = models.CharField(max_length=135,verbose_name='手机号码')
    email=models.EmailField(max_length=135,blank=True,verbose_name='邮箱')
    apply_position = models.CharField(max_length=135,blank=True,verbose_name='应聘职位')
    born_address =models.CharField(max_length=135,blank=True,verbose_name='生源地')
    gender= models.CharField(max_length=135,blank=True,verbose_name='性别')
    #学校与学历信息
    bachelor_school=models.CharField(max_length=135,blank=True,verbose_name='本科学校')
    master_school=models.CharField(max_length=135,blank=True,verbose_name='研究生学校')
    doctor_school =models.CharField(max_length=135,blank=True,verbose_name='博士生学校')
    major=models.CharField(max_length=135,blank=True,verbose_name='专业')
    degree = models.CharField(max_length=135,choices=DEGREE_TYPE,blank=True,verbose_name='学历')
    created_date=models.DateTimeField(verbose_name="创建日期",default=datetime.now)
    modified_date=models.DateTimeField(verbose_name="修改日期",default=datetime.now)
    #候选人自我介绍,工作经历,项目经历
    candidate_introduction = models.TextField(max_length=1024,blank=True,verbose_name='自我介绍')
    work_experience = models.TextField(max_length=1024,blank=True,verbose_name='工作经历')
    project_experience= models.TextField(max_length=1024,blank=True,verbose_name='项目经历')

    class Meta:
        verbose_name = '简历'
        verbose_name_plural= '简历列表'

到 admin.py 添加注册代码:

from jobs.models import Resume
class ResumeAdmin(admin.ModelAdmin):
    list_display = ('username', 'applicant', 'city', 'apply_position', 'bachelor_school', 'master_school', 'major','created_date')
    readonly_fields = ('applicant', 'created_date', 'modified_date')
    fieldsets=(
        (None,{'fields':(
            "applicant",("username","city","phone"),
            ("email", "apply_position", "born_address", "gender"),
            ("bachelor_school","master_school"),("major", "degree"),('created_date','modified_date'),
            "candidate_introduction","work_experience","project_experience",)}),
    )
    def save_model(self, request, obj, form, change):
        obj.applicant = request.user
        super().save_model(request, obj, form, change)

admin.site.register(Resume,ResumeAdmin)

然后就是进行数据库迁移,还是那两个命令

makemigrations
migrate

然后就可以看到简历界面了:

接下来我们要处理简历投递:

在 view.py 文件添加下面代码:

# Mixin使得可以继承多个父类
class ResumeCreateView(LoginRequiredMixin, CreateView):
    template_name = 'resume_form.html'
    success_url = '/joblist/'
    model= Resume
    fields = ["username", "city","phone",
              "email", "apply_position","gender",
              "bachelor_school", "master_school","major","degree",
              "candidate_introduction", "work_experience","project_experience"]

    #从URL请求参数带入默认值
    def get_initial(self):
        initial = {}
        for x in self.request.GET:
            initial[x] = self.request.GET[x]
        return initial

    #简历跟当前用户关联
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.applicant = self.request.user
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())

在 template 文件夹下创建 resume_form.html

<h2>提交简历</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p}}
    <input type="submit" value="提交">
</form>

并修改 job.html 的提交按钮

<div class="apply_position">
     <input type="button" style="width: 120px;background-color: lightblue;" value="申请" onclick="location.href='/resume/add/?apply_position={{ job.job_name }}&city={{ job.city_name }}'"/>
</div>

在 urls.py 添加 path

urlpatterns = [
    #职位列表
    path('joblist/',views.joblist, name="joblist"),
    #职位详情
    path('job/<int:job_id>/',views.detail, name="detail"),
    #提交简历
    path('resume/add/',views.ResumeCreateView.as_view(), name='resume-add'),
    path('',views.joblist,name="name")
]

现在就可以体验了

尝试提交一个,然后去后台发现提交成功!

接下来美化一下页面:

 安装包,这个建议用 Anaconda prompt 命令行安装,会自动帮你安装合适版本的安装包

pip install django-bootstrap4

然后在 setting.py 添加

INSTALLED_APPS = [
    'grappelli',
    'bootstrap4',
    'registration',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'jobs',
    'interview'
]

修改 resume_form.html 为

{# Load the tag Library #}
{% load bootstrap4 %}

{# Load CSS and JavaScript #}
{% bootstrap_css %}
{% bootstrap_javascript jquery='full'%}

{# Display django.contrib.messages as Bootstrap alerts #}
{% bootstrap_messages %}

<h2>提交简历</h2>
<form method="post" method="post" class="form" style="width:680px;margin-left:5px">
    {% csrf_token %}
    {% bootstrap_form form %}
    {% buttons %}
    <button type="submit" class="btn btn-primary">
        提交
    </button>
    {% endbuttons %}
</form>

为 base.html 的开头也添加样式

{# Load the tag Library #}
{% load bootstrap4 %}

{# Load CSS and JavaScript #}
{% bootstrap_css %}
{% bootstrap_javascript jquery='full'%}

{# Display django.contrib.messages as Bootstrap alerts #}
{% bootstrap_messages %}

并修改 job.html 的提交按钮样式

<div class="apply_position">
    <button type="submit" class="btn btn-primary" style="width: 120px;background-color: lightblue;" onclick="location.href='/resume/add/?apply_position={{ job.job_name }}&city={{ job.city_name }}'">
        申请
    </button>
</div>

最后的效果:

 

 感觉还是很一般啊哈哈哈哈哈

第八阶段就完成啦!

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

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

相关文章

展会资讯 | 现场精彩回顾 阿尔泰科技参展2024第23届中国国际(西部)光电产业!

2024第23届中国国际&#xff08;西部&#xff09;光电产业博览会&#xff0c;在成都世纪城新国际会展中心圆满落幕&#xff01;来自各地的光电领域设备及材料厂商汇聚一堂&#xff0c;展示前沿技术及创新成果。 展会现场&#xff0c;来自全国各地的500余家企业就精密光学、信息…

ubuntu22.04 cmake 配置mysql

报错信息&#xff1a; CMake Error at CMakeLists.txt:33 (find_package): By not providing “FindMySQL.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “MySQL”, but CMake did not find one. Could not…

MySQL:设置唯一索引还是出现重复数据

一、MySQL中null和null不相等 MySQL中&#xff1a;两个值比较会出现&#xff1a;true、false、null 三种情况&#xff1b; null和null相比较会出现未知的类型 二、然后看完这个视频 美团二面&#xff1a;我记得明明加了mysql唯一索引&#xff0c;为啥还会出现重复数据吗&…

手拉手springboot整合kafka

前期准备安装kafka 启动Kafka本地环境需Java 8以上 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 Kafka启动方式有Zookeeper和Kraft&#xff0c;两种方式只能选择其中一种启动&#xff0c;不能同时使用。 Kafka下载…

【独立版】商城盲盒源码带uniapp(H5+小程序+APP三端)全开源

前端uniapp开源代码&#xff0c;可用HBuilder工具无限发行H5、小程序和打包app&#xff0c;后端PHP开源源码&#xff0c;支持二开。 内有安装搭建教程&#xff0c;轻松部署&#xff0c;搭建即可运营&#xff0c;内置永久免费更新地址&#xff0c;后续无忧升级。 【独立版】商…

github托管静态页面

免费在线上空间&#xff0c;不用简直就是浪费&#xff0c;关键还不限流量赶紧去折腾一下 这是搭建的GitHub托管网页&#xff0c;由于是GitHub的服务器&#xff0c;国内访问会非常&#xff01;慢 下载 Watt Toolkit 这里我建议下载一个软件 Watt Toolkit 它是一个开源跨…

ArcGIS专题图制作—利用ArcGIS和Blender制作真实感的3D底图

小编前几日发布的3D地形图很多小伙伴表示很感兴趣&#xff0c;今天就大致做出来一个教程&#xff0c;技术不精&#xff0c;希望能给大家一些帮助&#xff01; 教程录制好视频了&#xff0c;大家可以自行查看&#xff01;链接如下&#xff1a; 超好看底图&#xff01; 使用ArcG…

redis 高可用 Sentinel 详解

写在前面 redis 在我们日常的业务开发中是十分常见的&#xff0c;而redis的可用性就必须要有很高的要求&#xff0c;那么 redis集群的高可用由有一个或者多个 Sentinel(哨兵) 实例组成的 哨兵系统来保证的。 哨兵 由一个或者多个 Sentinel 实例组成的 Sentinel 系统可以监控任…

图床搭建GitHub+PicGo+jsdelivr(CDN)+Typora(内附加速工具)

目录 安装PicGo GitHub配置与加速器 配置PicGo 使用typroa 安装PicGo PicGo是一个用于上传图片的客户端&#xff0c;支持拖拽上传、剪贴板上传&#xff0c;功能十分方便。 下载地址&#xff1a; https://github.com/Molunerfinn/PicGo/releases 个人网盘自取版本2.4.0…

C++成员初始化列表

我们在类的构造函数中使用成员初始化列表可以带来效率上的提升&#xff0c;那么成员初始化列表在编译后会发生什么就是这篇文章要探究的问题 文章目录 引入成员初始化列表用成员初始化列表优化上面的代码成员初始化列表展开成员初始化列表的潜在危险 参考资料 引入 考虑下面这…

CSS高级选择器

一、属性选择器 以value开头的att属性的E元素&#xff1a;E[att^"value"]{ ;} a[href^http]{background-color"red";} css a[href^http]{background-color"red"; } html <!DOCTYPE html> <html lang"en"> <head&…

特斯拉全自动驾驶系统Tesla‘s Full-Self Driving (FSD)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Overview Tesla’s FSD is a suite of features that includes Autopilot, Navigate on Autopilot, Auto Lane Change, Autopark, Summon, and Traffic Light and Stop Sig…

数字旅游引领未来智慧之旅:科技应用深度重塑旅游生态,智慧服务全面升级打造极致高品质旅游体验

随着信息技术的飞速发展&#xff0c;数字旅游作为旅游业与科技融合的新兴业态&#xff0c;正以其独特的魅力和优势&#xff0c;引领着旅游业迈向智慧之旅的新时代。数字旅游不仅通过科技应用重塑了旅游生态&#xff0c;更通过智慧服务为游客带来了高品质的旅游体验。本文将深入…

C语言嵌入Lua解释器的方法

Lua语言是一个轻量的脚本语言&#xff0c;可以用很少的资源运行其解释器 C语言是一个很常用的语言&#xff0c;广泛用于嵌入式等底层场景 这两个语言结合&#xff0c;可以应用于嵌入式等多个场景。比如&#xff0c;一些硬件公司会允许开发者使用Lua语言操作其硬件 Lua的安装…

PySpark学习---销售情况数据统计分析案例

需求分析&#xff1a; 某公司是做零售相关业务&#xff0c;旗下出品各类收银机. 目前公司的收银机已经在全国铺开,在各个省份均有店铺使用.机器是联网的,每一次使用都会将售卖商品数据上传到公司后台.老板现在想对省份维度的销售情况进行统计分析 逻辑需求&#xff1a; 1.各省销…

APScheduler定时器使用:django中使用apscheduler,使用mysql做存储后端

一、基本环境 python版本&#xff1a;3.8.5 APScheduler3.10.4 Django3.2.7 djangorestframework3.15.1 SQLAlchemy2.0.29 PyMySQL1.1.0二、django基本设置 2.1、新增一个app 该app用来写apscheduler相关的代码 python manage.py startapp gs_scheduler 2.2、修改配置文件s…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

重定义大语言模型的记忆能力:对抗性压缩如何挑战现有测量法

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; Rethinking LLM Memorization through the Lens of Adversarial Compression 引言&#xff1a;探索大型语言模型的记忆能力 在当今信息时代&#xff0c;大型…

ROS1快速入门学习笔记 - 11参数的使用与编程方法

目录 一、参数模型&#xff08;全局字典&#xff09; 二、使用方法 1. 创建功能包 2. 参数命令行的使用 3. 通过C实现参数设置 4. 在CMakeLists中进行编译 5. 运行程序 6. 编程方法&#xff08;Python&#xff09; 一、参数模型&#xff08;全局字典&#xff09; 每个节…

2024.5.5 机器学习周报

引言 Abstract 文献阅读 1、题目 SuperGlue: Learning Feature Matching with Graph Neural Networks 2、引言 本文介绍了SuperGlue&#xff0c;这是一种神经网络&#xff0c;它通过联合寻找对应关系并拒绝不匹配的点来匹配两组局部特征。通过求解一个可微的最优运输问题…