【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)

简介: 【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)

文章目录

一、候选人登录注册

  • 方法一:使用django-registraion-reduex (不建议),
    相关配置
    图片.png
  • 方法二:allauth 集成(建议

【Django | allauth】登录_注册_邮箱验证_密码邮箱重置

【Django | allauth】useprofile 用户模型扩展

【Django | allauth】重写allauth重置密码方法

二、创建建立模型

  1. 在jobs应用中添加如下模型
class Resume(models.Model):
    # 这里还是要添加姓名,因为用户名不一定是真名
  username = models.CharField(max_length=135,verbose_name=_('姓名'))
  applicant = models.ForeignKey(User, verbose_name=_('申请人'), related_name='resume')
  city = models.CharField(max_length=135, verbose_name=_('城市'), blank=True)
  phone = models.CharField(max_length=135, verbose_name=_('手机号码'))
  email = models.EmailField(max_length=135, verbose_name=_('邮箱'), blank=True)
  gender = models.CharField(max_length=135, verbose_name=_('性别'), blank=True)
  apply_position = models.CharField(max_length=135, verbose_name=_('应聘职位'), blank=True)
  born_address = models.CharField(max_length=135, verbose_name=_('生源地'), blank=True)
  candidate_remark = 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=_('学历'))
    # 自我介绍 工作经历  项目经历
    candidate_introduction = models.TextField(max_length=1048,help_text=_('自我介绍'),verbose_name=_('自我介绍'),blank=True,)
    work_experience = models.TextField(max_length=1048,help_text=_('工作经验'),verbose_name=_('工作经验'),blank=True,)
    project_experience = models.TextField(max_length=1048,help_text=_('项目经历'),verbose_name=_('项目经历'),blank=True,)
  def __str__(self):
    return self.applicant
  class Meta:
    verbose_name = _('简历')
    verbose_name_plural = _('简历')  # 复数形式
  1. 数据库迁移两把斧
  2. admin.py 注册该模型
@admin.register(Resume)
class ResumeAdmin(admin.ModelAdmin):
  # exclude 不包括列表.隐藏字段(系统自定生成默认值为其值)
  exclude = ('applicant',)
  # 展示列表
  list_display = ('id', 'username', 'applicant', 'phone', 'create_time', 'modify_time')
  list_display_links = ('username',)
  # list_editable = ('id',)
  fieldsets = (
    (None,
     {'fields': (
       'username',  'city', 'phone', 'email', 'gender', 'apply_position', 'born_address',)},
     ),
    ('学校信息', {'fields': ('bachelor_school', 'master_school', 'doctor_school', 'major', 'degree')}),
    ('个人能力', {'fields': ('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)

4.效果

56.gif

三、用户在线投递简历

图片.png

1)创建视图与模板

  1. 创建类视图(与之前的函数不一样)
    这里的类试图有很多写好的基类视图,如detailview,listview
    官方文档
# 类视图
class ResumeCreateView(LoginRequiredMixin, CreateView):
  """ 简历视图 """
  template_name = 'resume_form.html'
  model = Resume
  success_url = reverse('jobs:jobList')
  fields = ('username', 'city', 'phone', 'email', 'gender', 'apply_position', 'born_address', 'bachelor_school',
            'master_school', 'doctor_school', 'major', 'degree', 'candidate_introduction', 'work_experience',
            'project_experience')
  1. 创建模板 resume.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 %}
<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <title>Resume_form </title>
  <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }
      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
  </style>
  <!-- Custom styles for this template -->
</head>
<body class="bg-light">
<div class="container">
  <!--  header-->
  <div class="py-5 text-center">
    <img class="d-block mx-auto mb-4" src="https://p0.ssl.img.360kuai.com/t011ad70fa7f3d778f4.jpg?size=650x433"
       alt="" width="72"
       height="72">
    <h2>Send your email</h2>
    <p class="lead">send your email so that interviewer can get your resume .</p>
  </div>
  <!--resume-->
  <div class="container">
    <div class="col-md-8 order-md-1 d-block mx-auto ">
      <h4 class="mb-3">Resume</h4>
      <form class="needs-validation" novalidate method="post">
        {% csrf_token %}
        <div class="mb-3">
          {% bootstrap_form form %}
        </div>
        <hr class="mb-4">
        <button class="btn btn-primary btn-lg btn-block" type="submit">Send</button>
      </form>
    </div>
  </div>
  <!--footer-->
  <footer class="my-5 pt-5 text-muted text-center text-small">
    <p class="mb-1">&copy; 2017-2022 Hogwarts</p>
    <ul class="list-inline">
      <li class="list-inline-item"><a href="#">Privacy</a></li>
      <li class="list-inline-item"><a href="#">Terms</a></li>
      <li class="list-inline-item"><a href="#">Support</a></li>
    </ul>
  </footer>
</div>
</body>
</html>
  1. 添加到url.py
from django.urls import re_path
from jobs import views
app_name = 'jobs'
urlpatterns = [
    re_path(r'^$', views.jobList, name='jobList'),
    re_path(r'^job/(?P<id>[\d]+)/$', views.jobItem, name='jobItem'),
    re_path(r'^resume_form/$', views.ResumeCreateView.as_view(), name='resumeForm')
]

57.gif

2) 优化表单细节

这里我们工作的城市 和 职位并没有带到表单中

  • 解决: 在类视图写上 初始化方法get_initial
# 类视图
class ResumeCreateView(LoginRequiredMixin, CreateView):
  """ 简历视图 """
  ·······
  # 初始化
  def get_initial(self):
    initial = {}
    for message in self.request.GET:
      initial[message] = self.request.GET[message]
    return initial
  def form_valid(self, form):
    # 生成对象     (不直接提交)
    self.object = form.save(commit=False)
    # 添加表单中所没有的数据
    self.object.applicant = self.request.user
    # 保存
    self.object.save()
    # 返回url
    return HttpResponseRedirect(self.success_url)
  • job_item.html添加参数
<a href="{% url 'jobs:resumeForm'  %}?city={{job.job_place}}&apply_position={{job.job_name}}"
   ······

让简历进入到面试流程

图片.png

  1. admin.py添加如下代码
@admin.action(description="进入面试流程", permissions=['to_interview', ])
def enter_interview_process(modeladmin, request, querset):
  # 累加人数名字
  candidate_name = ''
  for resume in querset:
    candidate = Candidate()
    # __dict__ 属性就是全部的字典值
    candidate.__dict__.update(resume.__dict__)
    candidate.creator = request.user
    candidate_name = candidate.username + ',' + candidate_name
    candidate.save()
  messages.add_message(request, message="候选人:%s已成功进入面试流程" % candidate_name,level=messages.INFO)
# admin.site.register(Jobs,JobAdmin)
@admin.register(Resume)
class ResumeAdmin(admin.ModelAdmin):
  # 函数调用  不是字符串
  actions = [enter_interview_process ]
  def has_to_interview_permission(self, request):
    """Does the user have the export permission?"""
    # 得到model 的 meta数据
    opts = self.opts
    return request.user.has_perm('%s.%s' % (opts.app_label, 'enter_interview_process'))
  1. 添加该功能权限
    添加permission,方法同之前文章一样,这里就不赘述了。

图片.png

  • 添加成功

图片.png

🤞到这里,如果还有什么疑问🤞
    🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
      🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳



相关文章
|
3月前
|
NoSQL Java 关系型数据库
凭借Java开发进阶面试秘籍(核心版)逆流而上
最近参加了面试或者身边有朋友在面试的兄弟有没有发现,现在的面试不仅会问八股文,还会考察框架、项目实战、算法数据结构等等,需要准备的越来越多。 其实面试的时候,并不是要求你所有的知识点都会,而是关键的问题答到点子上!这份《Java 开发进阶面试秘籍(核心版)》由 P8 面试官整体把控,目前已经更新了 30 万字! 资料中涵盖了一线大厂、中小厂面试真题,毕竟真题都是技术领域最经典的基础知识和经验沉淀的汇总,非常有必要学习掌握!双重 buff 叠加,offer 接到手软~ 点击此处取,这可能是你到目前为止领取的最具含金量的一份资料! 整套资料涵盖:Spring、Spring
|
12天前
|
JavaScript 前端开发 API
给网站添加一个邮件反馈(django+vue)
给网站添加一个邮件反馈(django+vue)
6 0
|
27天前
|
供应链 JavaScript 前端开发
使用Django和Vue实现电子商务网站的后端和前端
【4月更文挑战第10天】本文介绍了使用Django和Vue构建电子商务网站的后端与前端方法。Django作为Python的Web框架负责后端,其模型-视图-控制器设计简化了商品管理、购物车和订单处理。Vue.js用于前端,提供数据驱动和组件化的用户界面。通过定义Django模型和视图处理请求,结合Vue组件展示商品和管理购物车,开发者可构建交互性强的电商网站。虽然实际开发涉及更多细节,但本文为入门提供了基础指导。
|
1月前
|
前端开发 测试技术 数据库
【python】为什么使用python Django开发网站这么火?
【python】为什么使用python Django开发网站这么火?
|
2月前
|
人工智能 搜索推荐 安全
Star 18k!推荐一款免费开源的简历生成神器,还搭配AI助力,面试官看了都不仅赞叹!
Star 18k!推荐一款免费开源的简历生成神器,还搭配AI助力,面试官看了都不仅赞叹!
|
2月前
|
安全 Java 数据库连接
首次面试经历(忘指导)当我在简历上写了苍穹外卖,瑞吉外卖时……
首次面试经历(忘指导)当我在简历上写了苍穹外卖,瑞吉外卖时……
268 1
|
2月前
|
缓存 Java 关系型数据库
Java开发面试题 | 2023
Java开发面试题 | 2023
|
3月前
|
缓存 监控 架构师
阿里面试:Java开发中,应如何避免OOM
在Java开发中,OutOfMemoryError(OOM)错误一直是令开发者头疼的问题,也是Java面试中出现核心频率很高的问题。 那么我们究竟怎么样才能够有效正确的管理内存,日常开发中究竟要注意哪些核心技巧来避免OOM错误。 本文将带大家一起学习10个避免OOM的实用小技巧,让大家在工作中能够有的放矢,避免OOM错误的飞来横祸。
55 1
|
4月前
|
存储 安全 数据库
关于“Python”Django 管理网站的核心知识点整理大全52
关于“Python”Django 管理网站的核心知识点整理大全52
19 0
|
29天前
|
存储 安全 Java
大厂面试题详解:java中有哪些类型的锁
字节跳动大厂面试题详解:java中有哪些类型的锁
55 0