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

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

文章目录

  • 一、候选人登录注册
  • 二、创建建立模型
  • 三、用户在线投递简历
    • 1)创建视图与模板
    • 2) 优化表单细节
  • 让简历进入到面试流程

一、候选人登录注册

  • 方法一:使用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.applicantclass Meta:verbose_name = _('简历')verbose_name_plural = _('简历')  # 复数形式
    
  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.usersuper().save_model(request, obj, form, change)
    

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')
    
  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 %}

    <!doctype html>

    Resume_form

    <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 -->
    

    Send your email

    send your email so that interviewer can get your resume .

    Resume

    {% csrf_token %}

    {% bootstrap_form form %}

    Send

    © 2017-2022 Hogwarts

    • Privacy
    • Terms
    • Support
  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<id>[d]+)/ ′,views.jobList,name=′jobList′),rep​ath(r′job/(?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()# 返回urlreturn HttpResponseRedirect(self.success_url)
    
  • job_item.html添加参数

    <a href=“{% url ‘jobs:resumeForm’ %}?city={{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.optsreturn request.user.has_perm('%s.%s' % (opts.app_label, 'enter_interview_process'))
    
  2. 添加该功能权限
    添加permission,方法同之前文章一样,这里就不赘述了。

  • 添加成功


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

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

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

  1. 【Django | 开发】面试招聘信息网站(美化admin站点添加查看简历详情链接)

  2. 【Django | 开发】权限划分(行为数据集)集成钉钉消息(案例:面试招聘信息网站)

  3. 【Django | 开发】面试招聘信息网站(快速搭建核心需求)

  4. 【Django | 开发】面试招聘信息网站(处理产品细节和权限美化页面样式)

  5. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...

  6. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  7. javaweb学习总结(二十二):基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  8. javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/

    javaweb学习总结(二十二)--基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+Ja ...

最新文章

  1. 动物模型:急性肝脏损伤模型的构建及选择
  2. java转net容易吗_每日一醒(1):学习Java容易忽视的小错误,你注意到了吗?
  3. devops之路rancher安装
  4. 数据结构与算法读书笔记2----C# 选择排序
  5. oracle 泵备份,Oracle逻辑备份之数据泵(一)
  6. d2crub学习2 算合计
  7. 为什么startPage后要紧跟查询?
  8. 国产时钟芯片应用探讨,CLB2305对标CY2305, CLB30110兼容IDT:8L30110,TI:CDCLVC1310
  9. Java中自定义比较器
  10. 了解java中暴力反射
  11. jsGannt Improved在vue中的使用
  12. Android8-Settings-BlueTooth
  13. 微信企业号开发七:JSAPI模式
  14. 第3章 结构之法——电话号码对应英语单词
  15. drop、truncate和delete的区别
  16. Android复杂页面代码拆分方法
  17. kafka中的ISR、AR又代表什么?ISR伸缩又是什么?
  18. java设备imei号_揭开,陌陌站街引流,设备异常,硬改,那些骗局
  19. 把SWF打回原形Imperator FLA v1.6.9.8
  20. 【SEO工具】抓取百度关键词相关关键词挖掘工具

热门文章

  1. 计算机一切存储转化都是二进制,计算机基础知识讲稿三.doc
  2. 渗透 | 靶机Aragog-1.0.2本地定时执行脚本提权到root
  3. 洛谷 P2614 计算器弹琴
  4. html5实现立体照片墙效果,利用css制作3D照片墙效果
  5. 纸的大小图解_常用纸张尺寸及示意图(A0,A1A3,A4,A5A8)数据源维基百科.PDF
  6. 如何通过Dynamics CRM 2015修改用户密码
  7. wordpress php7 报错,Use of undefined constant taotag-assumed 'taotag'知更鸟begin主题PHP7.0报错WordPress5.2...
  8. [动态规划入门] 记录动态规划的学习!
  9. 新歌 wuha之《武汉》
  10. docker build