【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

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



相关文章
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
186 45
|
1月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
2月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
133 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
67 2
|
2月前
|
JSON 中间件 数据格式
django获取request请求头信息,获取Content-Type
django获取request请求头信息,获取Content-Type
51 4
|
2月前
|
数据库 数据安全/隐私保护 数据库管理
#099473#基于django的毕业生信息管理招聘系统
#099473#基于django的毕业生信息管理招聘系统
45 4
|
2月前
|
JavaScript
面试官:组件库按需注册加载的实现思路是什么?
【10月更文挑战第6天】面试官:组件库按需注册加载的实现思路是什么?
|
4月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
98 0
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!

热门文章

最新文章