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


    在这里插入图片描述

    该文章收录专栏
    —Django从(图文并茂轻松上手教程)专栏—!!

    ??内容:
    【Djang | 增删改查】学生系统案例
    【Django | 项目搭建】快速搭建自己的项目
    【Django | allauth】登录_注册_邮箱验证_密码邮箱重置
    【Django | allauth】useprofile 用户模型扩展
    【Django | allauth】重写allauth重置密码方法
    【Django | 开发】面试招聘信息网站(快速搭建核心需求)
    【Django | 开发】面试招聘信息网站(增加csv,excel导出&日志管理功能)
    【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
    【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)

    文章目录

    一、候选人登录注册

    • 方法一:使用django-registraion-reduex (不建议),
      相关配置
      在这里插入图片描述

    • 方法二: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
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
    2. 数据库迁移两把斧

    3. 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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

    4.效果
    在这里插入图片描述

    三、用户在线投递简历

    在这里插入图片描述

    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
      • 2
      • 3
    2. 创建模板 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 %}

      Resume_form
      
      
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21

      Send your email

      send your email so that interviewer can get your resume .

      Resume

      {% csrf_token %}
      {% bootstrap_form form %}

      Send
    3. 添加到url.py

      from django.urls import re_path

      from jobs import views
      app_name = ‘jobs’
      urlpatterns = [
      re_path(r’^ ′ , v i e w s . j o b L i s t , n a m e = ′ j o b L i s t ′ ) , r e p a t h ( r ′ j o b / ( ? P < i d > [ d ] + ) / ', views.jobList, name='jobList'), re_path(r'^job/(?P[d]+)/ ,views.jobList,name=jobList),repath(rjob/(?P<id>[d]+)/‘, views.jobItem, name=‘jobItem’),
      re_path(r’^resume_form/$', views.ResumeCreateView.as_view(), name=‘resumeForm’)
      ]

    在这里插入图片描述

    1. 优化表单细节

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

    • 解决: 在类视图写上 初始化方法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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • job_item.html添加参数

      {job.job_place}}&apply_position={{job.job_name}}”
      ······

    让简历进入到面试流程

    在这里插入图片描述

    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
      • 2
      • 3
    2. 添加该功能权限
      添加permission,方法同之前文章一样,这里就不赘述了。

    在这里插入图片描述

    • 添加成功

    在这里插入图片描述
    在这里插入图片描述

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

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    好的内容回复区
    设计模式之策略模式(常规版&Lambda Function版)
    Hashmap 面试题 + Hashmap 原理 + Hashmap 源码(史上最全)
    04-Redis哨兵高可用架构
    操作系统—进程间通信方式
    Jenkins入门——安装docker版的Jenkins & 配置mvn,jdk等 & 使用案例初步 & 遇到的问题及解决
    pytest生成allure的报告
    多任务学习算法在推荐系统中的应用
    python实用函数
    【RealFill】一种新的用于图像补全的生成式模型
  • 原文地址:https://blog.csdn.net/m0_67401153/article/details/126080551