WEMAL PEMALAL LARGE PLEMALE SINGLE STEMNY ແລະ Security By Secure

ໂດຍ Daisy
WEMAL PEMALAL LARGE PLEMALE SINGLE STEMNY ແລະ Security By Secure ສະບັບທີສາມ Charlotte Harper ວັນທີ 3 ກໍລະກົດ, 2024 ປັບປຸງ / ປ່ຽນໃຈເຫລື້ອມໃສໃນວັນທີ 3 ມິຖຸນາ, 2025 foreword: ການພິຈາລະນາຄວາມປອດໄພໃນໂປແກຼມສ້າງສໍາລັບເວັບໄຊທ໌ແມ່ນສ່ວນຫນຶ່ງທີ່ສໍາຄັນຂອງແຜນການແລະການປະຕິບັດເວບໄຊທ໌ໃນຂະນະທີ່ມີຮູບແບບທີ່ເຫມາະສົມ, ມີປະໂຫຍດຕໍ່ຈຸດປະສົງ. The DOM (ເອກະສານວັດຖຸ Markup), ດ້ວຍການຈັດຕັ້ງປະຕິບັດໂຄງການ html, ສະແດງຄວາມສະດວກສະບາຍແລະການນໍາໃຊ້ ຜູ້ໃຊ້ສຸດທ້າຍທີ່ກໍາລັງຊອກຫາທີ່ຈະຂ້າເວລາຫລືເຮັດບາງສິ່ງບາງຢ່າງທີ່ເຮັດໃນອິນເຕີເນັດ, ໂດຍປົກກະຕິໃນອຸປະກອນສະມາດໂຟນສໍາພັດ. ຄົນສ່ວນໃຫຍ່ຈະບໍ່ຮູ້ບ່ອນທີ່ພວກເຂົາຕ້ອງການສ້າງຄວາມສະດວກສະບາຍແລະໂດຍສະເພາະແມ່ນມີຂໍ້ຈໍາກັດໃນການນໍາໃຊ້ໂປແກຼມໃຊ້ ຖ້າທ່ານມີສອງສາມນາທີທີ່ຈະອ່ານຜ່ານປື້ມຫົວນີ້ແລະຮຽນຮູ້ໂປແກຼມທີ່ມີປະສິດຕິພາບແລະຂຽນໃສ່ກັບທ່ານແລະເຮັດໃນສິ່ງທີ່ທ່ານຕ້ອງການແລະຕອບສະຫນອງຄວາມຕ້ອງການຂອງຜູ້ຊົມຂອງທ່ານ. ກ່ຽວກັບຂ້ອຍ: ຂ້າພະເຈົ້າເປັນຜູ້ພັດທະນາຊອບແວທີ່ມີປະສົບການທີ່ຫຼາກຫຼາຍໃນ C / C ++, Javon, Python, HTML, CSS ແລະ JavaScript. ຂ້າພະເຈົ້າສ້າງເວັບໄຊທ໌ທີ່ປະຊາຊົນຕ້ອງການໃຊ້, ຕ້ອງການທີ່ຈະໄປຢ້ຽມຢາມ, ແລະແມ່ນແຕ່ຕິດກັບການນໍາໃຊ້ພຽງແຕ່ເວລາທີ່ສ້າງຂຶ້ນ, ແລະຂ້າເວລາແລະຂ້າ, ຂ້ອຍຂາຍຊອບແວ. ຖ້າທ່ານມີຄວາມຄິດກ່ຽວກັບວິທີທີ່ທ່ານຕ້ອງການທີ່ຈະເບິ່ງແລະຫນ້າທີ່, ທ່ານເຕັມໃຈທີ່ຈະຕອບສະຫນອງຂອງຕົນເອງ, ແລະແມ້ກະທັ້ງ app ຄວາມປອດໄພດ້ານເຕັກໂນໂລຢີສູງເທົ່ານັ້ນທີ່ທ່ານສາມາດເຂົ້າເຖິງໄດ້. ແທນທີ່ຈະພະຍາຍາມຂາຍເວລາຂອງຂ້ອຍ, ຂ້ອຍກໍາລັງພະຍາຍາມທີ່ຈະຊື້ເຈົ້າເຂົ້າໄປໃນຂໍ້ມູນທີ່ມີຢູ່ແລ້ວ, ຜູ້ພັດທະນາຊອບແວເອກະລາດ, ນໍາພາອາຊີບທີ່ເຈົ້າຕ້ອງການ. ແລະໃຫ້ຂ້ອຍຈະແຈ້ງ, ການສຶກສາທີ່ຂ້ອຍໃຫ້ເຈົ້າຈະບໍ່ເປັນທາງການ. ທ່ານສາມາດໄປໂຮງຮຽນແລະຮຽນຮູ້ທັງຫມົດນີ້ດ້ວຍການສຶກສາຢ່າງເປັນທາງການ, ຫຼືແມ້ກະທັ້ງອ່ານປື້ມເຫຼັ້ມນີ້, ແລະໃຫ້ທ່ານຢູ່ໃນບ່ອນນັ່ງທີ່ຮ້ອນແລະຂໍໃຫ້ທ່ານສໍາເລັດການມອບຫມາຍ. ຂ້ອຍບໍ່ແມ່ນອາຈານຂອງເຈົ້າ, ເຈົ້າສາມາດຄິດເຖິງຂ້ອຍຄືກັບຫມູ່ທີ່ຢາກນໍາພາເຈົ້າໄປສູ່ຄວາມສໍາເລັດສ່ວນຕົວຂອງເຈົ້າເອງ. ແລະຂ້ອຍບໍ່ໄດ້ຂາຍໃຫ້ເຈົ້າປະສົບຜົນສໍາເລັດຄືກັນ, ເຈົ້າຈໍາເປັນຕ້ອງຊື້ມັນກັບເວລາຂອງເຈົ້າ. ການຮຽນຮູ້ທີ່ຈະລະຫັດມີເສັ້ນໂຄ້ງການຮຽນຮູ້ທີ່ສູງແລະບໍ່ແມ່ນເລື່ອງງ່າຍ, ຫຼືແມ່ນແຕ່ຄວນຈະເປັນ. ທ່ານຈໍາເປັນຕ້ອງເຮັດວຽກຫນັກເທົ່າທີ່ທ່ານສາມາດເຮັດໄດ້ແລະສືບຕໍ່ພະຍາຍາມແລະລົ້ມເຫລວແລະລອງໃຫມ່ອີກໃນຄໍາສັ່ງເພື່ອຮຽນຮູ້ແລະກໍ່ສ້າງແອັບ apps ຕົວທ່ານເອງ. ນັ້ນແມ່ນຢູ່ໃນລັກສະນະຂອງລະຫັດຕົວມັນເອງ. ລະຫັດແມ່ນຖືກອອກແບບໂດຍຜູ້ລວບລວມຂໍ້ມູນທີ່ຖືກອອກແບບມາເພື່ອໃຫ້ຂໍ້ຄວາມຜິດພາດຂອງນັກຂຽນໂປແກຼມ, ແລະມັນຈະສອນວິທີການລະຫັດຂອງທ່ານ, ເຖິງແມ່ນວ່າທ່ານພຽງແຕ່ຄັດລອກຄວາມຜິດພາດຂອງທ່ານເຂົ້າໃນຕົວຢ່າງຂອງທ່ານ. ແລະຂ້າພະເຈົ້າຕ້ອງເວົ້າ, ທ່ານບໍ່ຈໍາເປັນຕ້ອງຮັ່ງມີ, ສະຫຼາດ, ປະສົບຜົນສໍາເລັດ, ຫຼືແມ່ນແຕ່ລາຍລະອຽດຫຼືມີລາຍລະອຽດຫລືການຈັດຕັ້ງເພື່ອສ້າງແອັບ. ຄອມພິວເຕີເບິ່ງແຍງອົງການຈັດຕັ້ງນັ້ນສໍາລັບທ່ານ. ທ່ານພຽງແຕ່ຕ້ອງການທີ່ຈະອົດທົນໃນການທົດລອງແລະຄວາມຜິດພາດ, ຮັກສາຄວາມອ້ວນແລະເຮັດວຽກຫນັກໃນສິ່ງທີ່ທ່ານເຮັດ, ແລະທ່ານຈະມີອາຊີບທີ່ປະສົບຜົນສໍາເລັດຫຼາຍໃນສິ່ງທີ່ທ່ານເຮັດ. ຂ້ອຍແມ່ນໃຜ: ຂ້າພະເຈົ້າຮັບຮູ້ວ່າພາກສຸດທ້າຍແມ່ນກ່ຽວກັບການຮຽນຮູ້ແລະວິທີການຂອງທ່ານໃຫ້ທ່ານມີວິທີການຈາກປື້ມຫົວນີ້. ຂ້ອຍແມ່ນໃຜແນ່ນອນ? ນັ້ນແມ່ນຄໍາຖາມທີ່ສັບສົນ. ຂ້າພະເຈົ້າບໍ່ຈະແຈ້ງກ່ຽວກັບຕົວເອງ, ດັ່ງທີ່ຂ້າພະເຈົ້າໄດ້ຮັບການປິ່ນປົວມັນຍາກສໍາລັບຂ້ອຍໃນບາງຄັ້ງຄາວ ໃນສັ້ນ, ຖ້າທ່ານກໍາລັງອ່ານປື້ມຫົວນີ້, ທ່ານໄດ້ນໍາເອົາມັນກັບບ້ານເພາະວ່າທ່ານຈະໄດ້ຮັບຜົນປະໂຫຍດ, ຫຼືຖ້າທ່ານພຽງແຕ່ອ່ານຄົນທີ່ທ່ານຕ້ອງການເບິ່ງທ່ານ ຂ້ອຍເປັນນັກວິສະວະກອນຕົວເອງ, ນັກພັດທະນາຊອບແວ, ແລະນັກຮຽນ, ແລະຂ້ອຍກໍາລັງຂຽນຊີວິດຂອງພວກເຂົາໃຫ້ງ່າຍຂື້ນແລະມີປະໂຫຍດ, ມີປະໂຫຍດ, ແລະມີຄວາມສາມາດໃນການປະຕິບັດວຽກງານສໍາເລັດ. ສ່ວນໃຫຍ່ແມ່ນ, ນີ້ແມ່ນສິ່ງທີ່ຂ້ອຍເຮັດ: ຂ້ອຍສ້າງແອັບເພື່ອຊ່ວຍຕົວເອງແລະຄົນອື່ນໆປະສົບຜົນສໍາເລັດ. ຂ້າພະເຈົ້າເປັນຜູ້ຂຽນເຊັ່ນດຽວກັນ, ເຖິງແມ່ນວ່ານີ້ແມ່ນສິ່ງພິມທໍາອິດຂອງຂ້ອຍທີ່ຂ້ອຍຕັ້ງໃຈສໍາເລັດໃນຄໍາສັ່ງທີ່ຈະເອົາໃຈໃສ່ເອກະສານທີ່ເປັນປະໂຫຍດ, ແລະຂ້ອຍກໍ່ເປັນນັກສິລະປິນເຊັ່ນກັນ. ຂ້າພະເຈົ້າຈະຍອມຮັບສິ່ງນີ້ກັບທ່ານ, ຂ້ອຍແມ່ນຄົນແປກຫນ້າ. ຂ້າພະເຈົ້າບໍ່ສົມບູນແບບ, ຂ້າພະເຈົ້າໄດ້ແລ່ນກັບກົດຫມາຍເຖິງແມ່ນວ່ານໍາພາຂ້ອຍອອກຈາກວິທະຍາໄລແລະມະຫາວິທະຍາໄລແລະການພະຍາຍາມຕັ້ງຊື່ໃຫ້ຕົວເອງກັບຄວາມສໍາເລັດຫຼາຍ. ຂ້າພະເຈົ້າເປັນແມ່ຍິງໂດຍການເກີດ, ຂ້າພະເຈົ້າໃສ່ດິນຟ້າ, ຖ່າຍຮູບຂອງຕົວຂ້ອຍເອງ, ນຸ່ງເຄື່ອງນຸ່ງແລະເຄື່ອງນຸ່ງທີ່ມີສະຕິ, ແລະຂ້ອຍມີສະຕິຢູ່ໃນທໍາມະຊາດ. ຂ້າພະເຈົ້າມີບັນຫາກັບຄົນອື່ນໃນອະດີດທີ່ນໍາໄປສູ່ການປະຕິບັດການຂຽນແລະການກໍ່ສ້າງ WebApps, ແລະຂ້ອຍບໍ່ສາມາດເອົາປື້ມຫົວນີ້ໄດ້ໄວກວ່ານີ້: ທ່ານຕ້ອງການສິ່ງນີ້ແລ້ວ. ທ່ານຈະຕ້ອງການອ່ານແລະຂຽນລະຫັດທີ່ຄ້າຍຄືກັບຂ້ອຍແລະເຮັດວຽກຄືກັນກັບທີ່ທ່ານສາມາດຊື້ປື້ມຫົວນີ້ໄດ້ແທນທີ່ທ່ານຕ້ອງການທີ່ທ່ານຕ້ອງປະສົບຜົນສໍາເລັດໃນຊີວິດຂອງທ່ານ. ຂ້າພະເຈົ້າມີບັນຫາທຸກຢ່າງທີ່ມີຄອບຄົວເຕີບໃຫຍ່, ສະພາບສຸຂະພາບ, ທ່ານຫມໍ, ແລະກົດຫມາຍ, ແລະທໍາມະຊາດຂອງແມ່ຍິງໃນໂລກທີ່ແບ່ງອອກແລະຜິດປົກກະຕິໃນໂລກທີ່ແບ່ງອອກແລະຜິດປົກກະຕິໃນໂລກທີ່ແບ່ງອອກແລະຜິດປົກກະຕິໃນໂລກທີ່ແບ່ງອອກແລະຜິດປົກກະຕິໃນໂລກທີ່ແບ່ງອອກແລະຜິດປົກກະຕິ ເຖິງຢ່າງໃດກໍ່ຕາມ, ປື້ມຫົວນີ້ແມ່ນບາງສິ່ງບາງຢ່າງທີ່ຂ້ອຍສົນໃຈ, ລູກຂອງຂ້ອຍ, ການດໍາລົງຊີວິດຂອງຂ້ອຍ, ສະນັ້ນຂ້ອຍເອົາໃຈໃສ່ໃນການພິຈາລະນາກັບບ້ານແລະ pore ຢ່າງລະມັດລະວັງເພື່ອຮຽນຮູ້ຈາກຂ້ອຍ. ກະລຸນາຈື່ໄວ້ວ່າຂ້າພະເຈົ້າບໍ່ສົມບູນແບບ, ປື້ມຫົວນີ້ຈະມີຂໍ້ຜິດພາດ, ການປັບປຸງແກ້ໄຂ, ແລະທ່ານຈະຕ້ອງຄິດກັບສະຫມອງທີ່ດີທີ່ສຸດເທົ່າທີ່ທ່ານສາມາດເຮັດໄດ້ເພື່ອໃຫ້ມີປະສົບການທີ່ປະສົບຜົນສໍາເລັດ. ພ້ອມກັນນັ້ນ, ເຂົ້າໃຈວ່າຂ້ອຍຫມາຍຄວາມວ່າດີສໍາລັບເຈົ້າເຖິງແມ່ນວ່າເຈົ້າຈະປະເຊີນກັບສິ່ງທ້າທາຍໃນເວລາຂຽນ. ຄິດກ່ຽວກັບມັນເຊັ່ນນີ້: ໃນເວລາທີ່ທ່ານພຽງແຕ່ສາມາດເຊົ່າລະບົບຄອມພິວເຕີເພື່ອໃຫ້ຈິນຕະນາການແລະການຈັດຕັ້ງແລະເຂົ້າໃຈມັນ, ແລະເຂົ້າໃຈມັນຢ່າງແນ່ນອນ ຂ້າພະເຈົ້າບອກທ່ານສິ່ງນີ້ເພາະວ່າຂ້າພະເຈົ້າພົບກັບຄວາມຫຍຸ້ງຍາກຄືກັນ. ໃຊ້ປື້ມຫົວນີ້ດ້ວຍຄວາມສ່ຽງຂອງທ່ານເອງ, ເຮັດວຽກກັບບັນຫາທີ່ບໍ່ດີ, ແລະບໍ່ສາມາດເຮັດໃຫ້ທ່ານປະສົບຜົນສໍາເລັດໃນຂະແຫນງການທີ່ບໍ່ຖືກຕ້ອງ ເຮັດວຽກ, ອິນເຕີເນັດ. ທ່ານອາດຈະບໍ່ຄຸ້ນເຄີຍກັບຜູ້ທີ່ຂ້າພະເຈົ້າພຽງແຕ່ສອງສາມຄໍາ, ແຕ່ຂ້າພະເຈົ້າຂໍແນະນໍາໃຫ້ທ່ານອ່ານແລະເຂົ້າໃຈຂ້ອຍໃນຂະນະທີ່ສ້າງໂຄງການຂອງທ່ານ. ຈະບໍ່ມີວຽກບ້ານຫຍັງກັບປື້ມຫົວນີ້, ຕາບໃດທີ່ອາຈານຫຼືຄູອາຈານຂອງທ່ານບໍ່ໄດ້ສົ່ງເສີມໃຫ້ທ່ານຮູ້ຈັກກັບໂຄງການຕົວທ່ານເອງເມື່ອທ່ານສາມາດສະຫມັກສິ່ງທີ່ທ່ານໄດ້ຮຽນຮູ້. ໂຄງການທີ່ທ່ານໄດ້ສ້າງແລະປະຕິບັດໃຫ້ທ່ານຮູ້ຈັກລະຫັດແລະຄອບຄົວທີ່ທ່ານໄດ້ເຫັນ, ໂຄສະນາ, ໂຄສະນາຫາທ່ານ, ຫຼືໃນຂ່າວສານ. ປື້ມຫົວນີ້ແມ່ນຫຍັງ: ປື້ມຫົວນີ້ແມ່ນຄໍາແນະນໍາໂດຍຕົວຢ່າງ. ທ່ານສາມາດຊອກຫາລະຫັດໄດ້ທີ່ນີ້, ຄໍາແນະນໍາສໍາລັບຮຽນຮູ້ລະຫັດທີ່ທ່ານຕ້ອງການ, ແລະປະຕິບັດວິທີການສະແດງຄວາມຜິດພາດຂອງທ່ານ, ແລະຮູບພາບຂອງທ່ານ, ພ້ອມທັງຊອບແວຂອງທ່ານ, ພ້ອມທັງຊອບແວ ທ່ານສ້າງໃນຄວາມສະຫວ່າງທີ່ສຸດທີ່ສຸດເພື່ອໃຫ້ເປັນທີ່ດຶງດູດໃຈທີ່ສຸດເທົ່າທີ່ເປັນໄປໄດ້ທີ່ຜູ້ໃຊ້ສຸດທ້າຍຂອງທ່ານ, ນັກທ່ອງທ່ຽວຂອງເວັບໄຊທ໌້ຂອງທ່ານ. ໃນປື້ມຫົວນີ້, ຂ້າພະເຈົ້າຈະສະແດງຕົວຢ່າງຂອງການອອກແບບຊອບແວດ້ວຍຈຸດສຸມໃສ່ຫນ້າເວັບເປັນເວທີພ້ອມທັງຄວາມປອດໄພ. ພວກເຮົາຈະລິເລີ່ມການຮຽນຮູ້ອະພິສິດការរៀននិងសុវត្ថិភាពដ៏ជ្រាលជ្រៅតាមគេហទំព័រជាក់ស្តែងដោយផ្អែកលើគំរូ បោះពុម្ពលើកទី 3 Charlotte Harper ថ្ងៃទី 3 ខែកក្កដាឆ្នាំ 2024 ធ្វើឱ្យទាន់សម័យ / បំលែងថ្ងៃទី 3 ខែមិថុនាឆ្នាំ 2025
បុព្វបទ:
ការពិចារណាលើសុវត្ថិភាពក្នុងកម្មវិធីអគារសម្រាប់គេហទំព័រគឺជាផ្នែកសំខាន់មួយនៃផែនការនិងការប្រតិបត្តិរបស់អ្នកអភិវឌ្ឍន៍គេហទំព័រណាមួយនៅពេលដែលវិស្វករដែលអាចទុកចិត្តបានមានស្ថេរភាពនិងមានប្រយោជន៍សម្រាប់គោលបំណងជាក់ស្តែង។ DOM (Mange វត្ថុឯកសារ) ជាមួយនឹងការអនុវត្តរបស់ក្រុមហ៊ុន HTML, JavaScript, C / C ++, ផ្តល់នូវភាពងាយស្រួលក្នុងការប្រើប្រាស់ក៏ដូចជាសេវាកម្មដែលមានភាពទាក់ទាញដល់ Joe ដែលមានភាពទាក់ទាញ។ អ្នកប្រើសម្លឹងមើលដើម្បីសំលាប់ពេលវេលាឬទទួលបានអ្វីដែលបានធ្វើនៅលើអ៊ីនធឺណិតជាធម្មតានៅលើឧបករណ៍ស្មាតហ្វូនអេក្រង់ប៉ះ។ មនុស្សភាគច្រើនមិនទាំងដឹងថាត្រូវចាប់ផ្តើមនៅកន្លែងណានៅពេលដែលពួកគេចង់បង្កើតគេហទំព័រពីដំបូងពួកគេនឹងមានទំនោរក្នុងការចំណាយលើមុខងារដែលពួកគេចង់ប្រើដែលបានផ្តល់ឱ្យដែនកំណត់នៃការប្រើប្រាស់និងភាពបត់បែន។ ប្រសិនបើអ្នកមានពីរបីនាទីដើម្បីអានតាមរយៈសៀវភៅនេះហើយរៀនអ្វីដែលខ្ញុំចង់បង្រៀនអ្នកឬសូម្បីតែនិយាយជាមួយខ្ញុំដោយផ្ទាល់ហើយត្រូវបានជម្រុញឱ្យមានជម្រុញឱ្យមានទំនាក់ទំនងជាមួយអ្នកហើយធ្វើតាមតម្រូវការរបស់ទស្សនិកជនរបស់អ្នក។អំពីខ្ញុំ: ខ្ញុំជាអ្នកអភិវឌ្ឍន៍កម្មវិធីដែលមានបទពិសោធជាច្រើននៅក្នុង C / C ++, Java, Python, HTML, CSS និង JavaScript ។ ខ្ញុំបង្កើតគេហទំព័រដែលប្រជាជនចង់ប្រើចង់ទៅទស្សនាហើយថែមទាំងញៀនថ្នាំក្នុងការប្រើគ្រាន់តែរៀនស្វែងយល់និងពេលវេលាសំលាប់ហើយសំខាន់បំផុតខ្ញុំលក់សូហ្វវែរ។ ប្រសិនបើអ្នកមានគំនិតមួយថាតើអ្នកចង់បានគេហទំព័ររបស់អ្នកយ៉ាងដូចម្តេចអ្នកមានបំណងគាំទ្រខ្ញុំដូច្នេះខ្ញុំអាចបំពេញតាមតម្រូវការរបស់អ្នកហើយអ្នកនឹងបង្កើតអ្នកនូវកម្មវិធី YouTube បន្ទាប់ Google ឬសូម្បីតែកម្មវិធីសុវត្ថិភាពបច្ចេកវិទ្យាខ្ពស់អ្នកអាចចូលបាន។ ជំនួសឱ្យការព្យាយាមលក់ពេលវេលារបស់អ្នកខ្ញុំកំពុងព្យាយាមទិញរបស់អ្នក: ខ្ញុំចង់និយាយជាមួយអ្នកនូវព័ត៌មានដែលមានរួចហើយហើយបង្រៀនអ្នកពីអ្វីដែលអ្នកត្រូវក្លាយជាអ្នកអភិវឌ្ឍន៍កម្មវិធីដែលនាំឱ្យអាជីពជោគជ័យក្នុងវិស័យដែលអ្នកចង់បាន។ ហើយសូមឱ្យខ្ញុំកាន់តែច្បាស់ការអប់រំដែលខ្ញុំផ្តល់ឱ្យអ្នកនឹងមិនផ្លូវការ។ អ្នកអាចទៅសាលារៀនហើយរៀនទាំងអស់នេះជាមួយនឹងការអប់រំជាផ្លូវការឬថែមទាំងបានអានសៀវភៅនេះនៅសាលាបានបំពេញការងាររបស់អ្នកហើយដកខ្លួនចេញពីការអប់រំរបស់អ្នកប៉ុន្តែខ្ញុំនឹងមិនធ្វើឱ្យអ្នកនៅលើកៅអីក្តៅហើយសុំឱ្យអ្នកបំពេញការងារបានទេ។ ខ្ញុំមិនមែនជាសាស្រ្តាចារ្យរបស់អ្នកទេអ្នកអាចគិតពីខ្ញុំដូចជាមិត្តម្នាក់ដែលចង់ណែនាំអ្នកឆ្ពោះទៅរកអាជីពដែលជំរុញដោយជោគជ័យផ្ទាល់ខ្លួនរបស់អ្នក។ ហើយខ្ញុំក៏មិនលក់ជោគជ័យដែរអ្នកក៏ត្រូវទិញវាជាមួយនឹងពេលវេលារបស់អ្នកដែរ។ ការរៀនក្រមមានខ្សែកោងរៀនយ៉ាងចោតហើយមិនដែលងាយទេឬសូម្បីតែសន្មតថាជា។ អ្នកត្រូវខិតខំប្រឹងប្រែងតាមដែលអ្នកអាចធ្វើបានហើយបន្តព្យាយាមនិងបរាជ័យហើយព្យាយាមម្តងទៀតទោះបីអ្នកមានការខកចិត្តក៏ដោយដើម្បីរៀននិងបង្កើតកម្មវិធីដោយខ្លួនឯង។ នោះជាលក្ខណៈនៃលេខកូដដោយខ្លួនឯង។ លេខកូដត្រូវបានដំណើរការដោយអ្នកចងក្រងដែលត្រូវបានរចនាឡើងដើម្បីផ្តល់ឱ្យសារកំហុសរបស់អ្នកសរសេរកម្មវិធីហើយទាំងនេះនឹងបង្រៀនអ្នកពីរបៀបសរសេរកូដទោះបីជាអ្នកគ្រាន់តែចម្លងកំហុសក្នុងម៉ាស៊ីនស្វែងរករបស់អ្នកហើយអានឧទាហរណ៍របស់អ្នកដទៃ។ ហើយខ្ញុំត្រូវតែនិយាយថាអ្នកមិនចាំបាច់ក្លាយជាអ្នកមានទេឆ្លាតវាងវៃជោគជ័យឬសូម្បីតែតម្រង់ទិសលម្អិតឬរៀបចំដើម្បីបង្កើតកម្មវិធី។ កុំព្យូរទ័រថែរក្សាអង្គការនោះសម្រាប់អ្នក។ អ្នកគ្រាន់តែត្រូវការតស៊ូឆ្លងកាត់ការជំនុំជម្រះនិងកំហុសរក្សាការផ្តោតអារម្មណ៍និងខិតខំធ្វើអ្វីដែលអ្នកធ្វើហើយអ្នកនឹងមានអាជីពជោគជ័យក្នុងការធ្វើអ្វីៗដែលអ្នកបានធ្វើ។
ខ្ញុំជានរណា: ខ្ញុំដឹងថាផ្នែកចុងក្រោយគឺកាន់តែច្រើនអំពីការរៀនសូត្រហើយការទទួលយកវិធីមួយពីសៀវភៅនេះ។ តើខ្ញុំជានរណា? នោះជាសំណួរស្មុគស្មាញ។ ខ្ញុំមិនច្បាស់អំពីរឿងនេះទេដូចដែលខ្ញុំទទួលរងពីស្ថានភាពសុខភាពដែលអាចធ្វើឱ្យខ្ញុំពិបាកសូម្បីតែលេខកូដឬសរសេរសៀវភៅនេះនៅពេលបង្ហាញពីបញ្ហាប្រឈមជាមួយនឹងបញ្ហាអត្តសញ្ញាណដែលធ្វើឱ្យជីវិតរបស់ខ្ញុំកាន់តែលំបាកនៅពេលនិយាយអំពីខ្លួនខ្ញុំ។ និយាយឱ្យខ្លីប្រសិនបើអ្នកកំពុងអានសៀវភៅនេះអ្នកបានយកវាមកផ្ទះវិញព្រោះអ្នកបានឆ្លងកាត់វាហើយគិតថាវាមានប្រយោជន៍ឬទោះបីជាអ្នកគ្រាន់តែអានវានៅឆ្ងាយពីអ្នកដែលចង់ឃើញអ្នកទទួលជោគជ័យក្នុងអ្វីគ្រប់យ៉ាងដែលអ្នកធ្វើ។ ខ្ញុំជាវិស្វករខ្ញុំដែលជាអ្នកបង្កើតកម្មវិធីនិងនិស្សិតម្នាក់ហើយខ្ញុំកំពុងសរសេរកម្មវិធីនេះឱ្យកាន់តែងាយស្រួលដោយផ្តល់នូវភាពងាយស្រួលក្នុងការថតចម្លងដែលមានដំណើរការល្អដែលអាចបើកបរបានជោគជ័យមិនថាមានខ្សែភ្លើងក៏ដោយ។ ភាគច្រើននេះគឺជាអ្វីដែលខ្ញុំធ្វើ: ខ្ញុំសាងសង់កម្មវិធីដើម្បីជួយខ្លួនឯងនិងអ្នកដទៃឱ្យទទួលបានជោគជ័យ។ ខ្ញុំជាអ្នកនិពន្ធផងដែរទោះបីជានេះជាការបោះពុម្ភផ្សាយដំបូងរបស់ខ្ញុំដែលខ្ញុំមានបំណងបំពេញក្នុងគោលបំណងដើម្បីដាក់ផលប័ត្ររបស់ខ្ញុំរួមគ្នាទៅក្នុងឯកសារដែលមានប្រយោជន៍ហើយខ្ញុំក៏ជាសិល្បករផងដែរ។ ខ្ញុំនឹងទទួលយករឿងនេះដល់អ្នកខ្ញុំគឺជាមនុស្សចំលែក។ ខ្ញុំមិនល្អឥតខ្ចោះខ្ញុំបានរត់ចូលក្នុងច្បាប់នេះថែមទាំងនាំឱ្យខ្ញុំចាកចេញពីមហាវិទ្យាល័យនិងសាកលវិទ្យាល័យហើយចាកចេញពីរដ្ឋដើម្បីព្យាយាមរកឈ្មោះសម្រាប់ខ្លួនខ្ញុំកាន់តែទទួលបានជោគជ័យ។ ខ្ញុំជាស្ត្រីម្នាក់ដោយកំណើតខ្ញុំស្លៀកពាក់តុបតែងខ្លួនខ្ញុំស្លៀកសំលៀកបំពាក់និងសម្លៀកបំពាក់របស់ស្ត្រីផ្សេងទៀតហើយខ្ញុំបានដឹងខ្លួនថាខ្លួនខ្ញុំជាស្ត្រីដោយធម្មជាតិ។ ខ្ញុំមានបញ្ហាជាមួយមនុស្សផ្សេងទៀតកាលពីអតីតកាលដែលនាំឱ្យមានការតស៊ូជាមួយនឹងការសរសេរនិងអគារ Webapps ហើយខ្ញុំសុំទោសដែលខ្ញុំមិនអាចទទួលបានសៀវភៅនេះឆាប់ៗនេះ: អ្នកត្រូវការរឿងនេះ។ អ្នកនឹងចង់អាននិងសរសេរកូដដែលមើលទៅដូចជាអណ្តូងរ៉ែហើយធ្វើការដូចខ្ញុំហើយធ្វើដូចគ្នាប៉ុន្តែកាន់តែប្រសើរព្រោះខ្ញុំអាចរកលុយបានប្រាក់សម្រាប់វាអ្នកត្រូវទទួលបានជោគជ័យក្នុងជីវិតរបស់អ្នក។ ខ្ញុំមានបញ្ហាគ្រប់ប្រភេទជាមួយនឹងគ្រួសារដែលធំធាត់ថាមានសុខភាពគ្រួសារវេជ្ជបណ្ឌិតប្រព័ន្ធផ្សព្វផ្សាយនិងច្បាប់នេះឆ្លុះបញ្ចាំងពីការតស៊ូដែលមានលក្ខណៈជាស្ត្រីនិងស្ត្រីដែលមានអារម្មណ៍អាក់អន់ចិត្ត។ ទោះជាយ៉ាងណាក៏ដោយសៀវភៅនេះគឺជាអ្វីដែលខ្ញុំយកចិត្តទុកដាក់ចំពោះកូន ៗ ផលប័ត្ររបស់ខ្ញុំនិងជីវភាពរបស់ខ្ញុំដូច្នេះខ្ញុំសូមកោតសរសើរចំពោះការពិចារណារបស់អ្នកនៅពេលអ្នកយកអត្ថបទទៅផ្ទះនិងរន្ធញើសដោយប្រុងប្រយ័ត្នដើម្បីរៀនពីខ្ញុំ។ សូមចងចាំថាខ្ញុំមិនល្អឥតខ្ចោះសៀវភៅនេះនឹងមានកំហុសការកែប្រែនិងការបោះពុម្ពថ្មីហើយអ្នកត្រូវគិតជាមួយខួរក្បាលឡូជីខលរបស់អ្នកឱ្យបានល្អបំផុតដើម្បីឱ្យមានបទពិសោធជោគជ័យក្នុងការសរសេរជោគជ័យ។ ដូចគ្នានេះផងដែរយល់ថាខ្ញុំមានន័យយ៉ាងល្អសម្រាប់អ្នកសូម្បីតែនៅពេលដែលអ្នកប្រឈមមុខនឹងឧបសគ្គនៅពេលសរសេរក៏ដោយ។ គិតអំពីវាដូចនេះ: នៅពេលដែលអ្នកអាចជួលប្រព័ន្ធកុំព្យួទ័រដើម្បីធ្វើអ្វីគ្រប់យ៉ាងដែលអ្នកអាចស្រមៃបានក្នុងការរក្សាទុករាល់ការប្រាស្រ័យ័យរបស់អ្នកនឹងជួបប្រទះការលំបាកជាមួយនឹងព័ត៌មានដែលអ្នកកំពុងលេបថ្នាំដែលអ្នកកំពុងទទួលនិងសូម្បីតែការបោះពុម្ពផ្សាយ។ ខ្ញុំប្រាប់អ្នកពីរឿងនេះព្រោះខ្ញុំជួបប្រទះការលំបាកដូចគ្នា។ ប្រើសៀវភៅនេះដោយប្រថុយប្រថានរបស់អ្នកធ្វើការជាមួយសហគមន៍និងសហគមន៍របស់អ្នកឱ្យអ្នកដើម្បីសាងសង់កម្មវិធីក្នុងការកំណត់ដែលមានសុវត្ថិភាពហើយហេតុអ្វីខ្ញុំបានធ្វើឱ្យខ្ញុំខូចទ្រង់ទ្រាយនៅលើមាត្រដ្ឋានពិភពលោកនៃបណ្តាញ Paralellication នៃបណ្តាញដែលយើងនឹងធ្វើការ។ អ៊ីនធឺណិត។ អ្នកប្រហែលជាមិនសូវស្គាល់ខ្ញុំជាមួយនឹងការគ្រាន់តែជាពាក្យពីរបីម៉ាត់ទេប៉ុន្តែខ្ញុំលើកទឹកចិត្តឱ្យអ្នកអានអ្នកនឹងស្គាល់ខ្ញុំនៅពេលអ្នកបន្តអាននិងយល់ខ្ញុំនៅពេលសាងសង់ការងាររបស់អ្នក។ វានឹងមិនមានកិច្ចការផ្ទះជាមួយសៀវភៅនេះដរាបណាសាស្រ្តាចារ្យឬគ្រូរបស់អ្នកមិនចាត់អ្នកឧទ្ធរណ៍ណាមួយទេប៉ុន្តែខ្ញុំសូមលើកទឹកចិត្តឱ្យអ្នកក្នុងការកសាងផលប័ត្ររបស់ខ្លួនអ្នកនៅពេលអ្នកអានតាមរបៀបដែលអ្នកអាចអនុវត្តតាមអ្វីដែលអ្នកបានរៀន។ គម្រោងដែលជាមូលដ្ឋានគ្រឹះរបស់ខ្ញុំគឺជាមូលដ្ឋានភាគច្រើននៃអ្វីដែលអ្នកនឹងអាននៅក្នុងសៀវភៅនេះដែលបានបញ្ចូលលេខកូដរបស់ខ្ញុំលេខកូដដែលខ្ញុំអាចរកបាននូវភាពពេញនិយមរបស់មិត្តភក្តិឬក្រុមគ្រួសាររបស់អ្នកដោយប្រើនៅលើអ៊ិនធឺរណែតដែលបានផ្សព្វផ្សាយដល់អ្នកឬព័ត៌មាន។អ្វីដែលសៀវភៅនេះគឺ: សៀវភៅនេះគឺជាការបង្រៀនមួយដោយឧទាហរណ៍។ អ្នកអាចស្វែងរកលេខកូដនៅទីនេះការណែនាំអំពីវិធីរៀនក្រមព័ត៌មានស្តីពីកូដបំបាត់កំហុសការដោះស្រាយកូដរបស់អ្នកដោយមានសារៈសំខាន់ណាស់ដែលមានសារៈសំខាន់និងរបៀបបង្ហាញខ្លួនអ្នកក៏ដូចជាកម្មវិធីក្រុមហ៊ុនក៏ដូចជាកម្មវិធីរបស់អ្នកក៏ដូចជាកម្មវិធីរបស់អ្នកផងដែរ។ សាងសង់ក្នុងពន្លឺដ៏ល្អបំផុតដែលមានភាពទាក់ទាញបំផុតតាមដែលអាចធ្វើទៅបានចំពោះអ្នកប្រើប្រាស់ចុងក្រោយរបស់អ្នកអ្នកទស្សនាគេហទំព័ររបស់អ្នក។ នៅក្នុងសៀវភៅនេះខ្ញុំនឹងបង្ហាញឧទាហរណ៍មួយចំនួននៃការរចនាកម្មវិធីដោយផ្តោតលើគេហទំព័រដែលជាវេទិកាក៏ដូចជាសន្តិសុខ។ យើងនឹងផ្តួចផ្តើមបទពិសោធន៍នៃការសិក្សាដោយការបង្កើតគម្រោងមូលដ្ឋានដោយប្រើសំបកយូនីកដោយមានលក្ខណៈពិសេសបម្រុងទុកនិងស្គ្រីប។ បន្ទាប់មកយើងនឹងពិនិត្យមើលគេហទំព័រប្លក់មូលដ្ឋានធ្វើឱ្យប្រសើរឡើងនូវប្លុករបស់យើងជាមួយនឹងលក្ខណៈពិសេសនៃរូបថតនិងវីដេអូក៏ដូចជាប្រើដំណោះស្រាយសុវត្ថិភាពដោយប្រើកម្មវិធីឥតគិតថ្លៃនិងសុវត្ថិភាពម៉ាស៊ីនមេរបស់យើងដោយប្រើម៉ូឌុលផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់កម្មវិធីដែលអាចប្រើបាន។ បន្ទាប់មកយើងនឹងពិនិត្យមើលការដោះស្រាយនិងដំណើរការឯកសារនិងដំណើរការកែសំរួលវីដេអូការបរិច្ចាគសំឡេងការឆ្លុះបញ្ចាំងបាកូដនិងការទទួលស្គាល់តួអក្សរអុបទិកក្នុងចំណោមគំនិតផ្សេងទៀត។ នៅតាមផ្លូវយើងនឹងពិនិត្យមើល APIs ដែលនឹងជួយយើងធ្វើឱ្យកម្មវិធីរបស់យើងកាន់តែមានប្រយោជន៍និងមានសុវត្ថិភាពដោយមានជម្រើសឥតគិតថ្លៃនិងបង់ប្រាក់។ នៅតាមផ្លូវយើងនឹងស្វែងយល់ពីសន្តិសុខរាងកាយនិងឧបករណ៍សកម្មប្រយុទ្ធដូចជាអាវុធនិងការផលិតគ្រាប់បែកគ្នារួមមាន Barrel រចនាម៉ូដ Turret និងម្ចាស់ហាងដទៃទៀតដែលយើងនឹងធ្វើសមាហរណកម្មលើបណ្តាញដែលមានស្រាប់ដើម្បីការពារកម្មវិធីរបស់យើងនិងបង្ហាញការការពារខ្លួននិងការកើនឡើង។ យើងនឹងឈប់សម្រាកនៅតាមផ្លូវដើម្បីសាងសង់ម៉ាស៊ីនបង្ហាញ 2D និង 3D និងធ្វើការជាមួយផ្នែករឹងដែលបានបង្កប់ក្នុងករណីសិក្សាសូហ្វវែរវិមាត្រមូលដ្ឋាននិងសម្តែងការញាប់ញ័រអេឡិចត្រូនិចក្នុងជ័រកៅស៊ូស៊ីលីកុន។ នៅតាមផ្លូវយើងក៏នឹងជួលដំណោះស្រាយស្វែងរកម៉ាស៊ីនដែលមានរួចហើយដើម្បីធ្វើឱ្យកម្មវិធីរបស់យើងកាន់តែប្រសើរឡើង។ យើងក៏នឹងជួលឧបករណ៍ស្តុកដែលមានសម្រាប់គេហទំព័រក្នុងគោលបំណងដើម្បីស្តារនិងភ្ជាប់ដំណើរការ។ សៀវភៅនេះគឺជាការណែនាំចំពោះភាពជោគជ័យរបស់អ្នកក្នុងការបង្កើតកម្មវិធីបណ្តាញនិងបញ្ចូលវាជាមួយបណ្តាញវិជ្ជាជីវៈរបស់កុំព្យួទ័រនិងប្រព័ន្ធមេកានិចដែលបានបង្កប់និងមគ្គុទេសក៍ផ្នែករឹងដោយមិនមានចំណេះដឹងខាងផ្ទៃខាងក្រោយឬបទពិសោធន៍ពីមុន។
អ្វីដែលសៀវភៅនេះមិនមែនជាៈ ប្រសិនបើអ្នកពិតជាចង់មានគេហទំព័រអ្នកគ្រាន់តែអាចរៀបចំហាងសាមញ្ញហើយលក់អ្វីដែលអ្នកត្រូវការសូមបិទកំណត់ហេតុបណ្ដាញបង្ហោះរូបភាពឬវីដេអូឬបើមិនដូច្នេះទេបើមិនធ្លាប់មានក្នុងការសរសេរលេខកូដតែមួយ។ សៀវភៅនេះមិនមែនទេ។ សៀវភៅនេះនឹងបង្រៀនអ្នកពីរបៀបបង្កើតកម្មវិធីដែលមានប្រយោជន៍ដែលមានលក្ខណៈពិសេសពេញលេញមានមុខងារនិងមិនសូវមានតំលៃក្នុងការធ្វើឱ្យក្រុមហ៊ុនឈានមុខគេក្នុងការរកលុយសម្រាប់អ្នកដែលមិនធ្វើអ្វីទាំងអស់។ ប្រសិនបើអ្នកធ្វើតាមសៀវភៅនេះយ៉ាងជិតអ្នកនឹងចង់សរសេរកូដកូដស្រាវជ្រាវបង្កើតកម្មវិធីផ្ទាល់ខ្លួនរបស់អ្នកហើយអ្នកនឹងរកលុយពីអ្វីដែលអ្នកធ្វើ។ ខ្ញុំនឹងរកលុយបានពីសៀវភៅនេះសូម្បីតែនៅដំណាក់កាលដំបូងក៏ដោយព្រោះវាមានព័ត៌មានដែលមនុស្សត្រូវការនិងចង់អានហើយកំពុងទិញរួចហើយនៅពេលពួកគេទិញឬប្រើកម្មវិធីរបស់ខ្ញុំ។ សៀវភៅនេះនឹងមិនសាងសង់កម្មវិធីសម្រាប់អ្នកទេប៉ុន្តែវានឹងចង្អុលបង្ហាញអ្នកក្នុងទិសដៅត្រឹមត្រូវហើយប្រដាប់ដោយឧបករណ៍ដែលអ្នកត្រូវការនិងជាឧទាហរណ៍របស់អ្នកដែលនឹងជួយសម្រួលដល់អ្នកស្រុកអ្នកម៉ៅការអ្នកម៉ៅការជើងនិងប្រជាជនរបស់អ៊ិនធឺរណែតចង់ប្រើប្រាស់និងគាំទ្រ។អ្វីដែលអ្នកនឹងរៀន: សៀវភៅនេះនឹងបង្រៀនអ្នកពីរបៀបបង្កើតនិងលក់សូហ្វវែរដែលមានមុខងារការថតប្រព័ន្ធផ្សព្វផ្សាយការស្កេន Web APIs ដើម្បីផ្ទៀងផ្ទាត់និងការផ្លាស់ប្តូរសារដូចជាប៊្លូធូសនិងផ្នែកខាងក្នុង (NFC) ។ សៀវភៅនេះនឹងបង្រៀនអ្នកពីរបៀបប្រើកុំព្យួទ័រដែលមានបណ្តាញដោយផ្តោតលើក្រណាត់របស់ Debian Linue ដើម្បីធ្វើឱ្យការចូលរៀនរបស់អ្នកមានលក្ខណៈសមហេតុសមផលជាមួយនឹងគេហទំព័រដែលមានអន្តរកម្មនិងបណ្តាញផ្សេងទៀតដើម្បីផ្តល់នូវមុខងារសុវត្ថិភាពដូចជាសារអត្ថបទសម្រាប់ការផ្ទៀងផ្ទាត់ ឬគោលបំណងផ្សេងទៀតការស្កេនរូបភាពនិងការកែប្រែវីដេអូមីក្រូឡូនទិន្នន័យដើម្បីរក្សាកម្មវិធីកុំព្យូទ័រដែលមានសុវត្ថិភាពការជួញដូរការធ្វើចលនាការធ្វើចលនាការធ្វើចលនាការធ្វើត្រាប់តាមការធ្វើត្រាប់តាមការធ្វើត្រាប់តាមការធ្វើត្រាប់តាមការងារអសមកាលការនិងការងារជាច្រើនទៀត។ អ្នកនឹងរៀនពីរបៀបបង្កើតឧបករណ៍ប៊្លូធូសផ្ទាល់ខ្លួនរបស់អ្នកដែលមានអាគុយឆ្នាំងសាកជាងអ្នករៀនសៀគ្វីនិងឧបករណ៍ចាប់សញ្ញាដោយប្រើ Solder, សំភារៈដេញ។ ខ្ញុំនឹងបង្ហាញគោលការណ៍រចនា 3D ដែលត្រូវបានអនុវត្តចំពោះការផលិតនិងឧបករណ៍បន្ថែមទៀតហើយស្លាប់ដូច្នេះអ្នកអាចផលិតឧបករណ៍រឹងរបស់អ្នកដែលមានអាគុយចំរុះសៀគ្វីត្រាអេឡិចត្រូនិចនិងលទ្ធផលមុខងារ។ និងបណ្តាញពួកគេជាមួយប៊្លូធូសនិងគេហទំព័រ។ ជាពិសេសយើងនឹងពិនិត្យមើលករណីសិក្សាពីរដែលជាអ្នកឧកញ៉ាញ័រនិងអាវុធធ្វើនៅផ្ទះទាំងកម្មវិធីទាំងពីរដែលមានមុខងារអន្តរមុខក្រាហ្វិចឬឧបករណ៍ប្រើប្រាស់បន្ទាត់ពាក្យបញ្ជាហើយអាចត្រូវបានបញ្ចូលទៅក្នុងគេហទំព័រសម្រាប់លទ្ធផលដែលមានល្បឿនលឿន។ អ្នកនឹងរៀនពីរបៀបដើម្បីសាងសង់និងដាក់ពង្រាយគេហទំព័រពីដីដោយគ្មានបទពិសោធជាមុនធ្វើឱ្យវាមានមុខងារសុវត្ថិភាពមានសុវត្ថិភាពមានប្រយោជន៍និងមានប្រយោជន៍បំផុត។ អ្នកនឹងរៀនពីរបៀបប្រើការរៀនម៉ាស៊ីននិងចក្ខុវិស័យកុំព្យួទ័រដើម្បីធ្វើឱ្យគេហទំព័រមានសុវត្ថិភាពនិងជាក់ស្តែងបន្ថែមទៀតនូវសំលេងរបស់អ្នកនិងរបៀបបំបែកព័ត៌មានដែលមានប្រយោជន៍ដែលអ្នកត្រូវផ្តល់ជូនហើយកាន់តែសំខាន់ជាងនេះទៅទៀត។ សៀវភៅនេះនឹងផ្តោតលើប្រព័ន្ធផ្សព្វផ្សាយសន្តិសុខនិងការរៀនម៉ាស៊ីនដែលជាសមាសធាតុសំខាន់ៗចំនួន 3 ដែលនឹងជួយឱ្យអ្នកបង្កើតកម្មវិធីដែលមានប្រយោជន៍និងរំខានដល់អ្នកដែលមានភាពប្រាកដនិយមជាក់ស្តែងនិងចូលរួមដោយស្វ័យប្រវត្តិកម្មនិងការធ្វើឱ្យមានភាពស្វាហាប់។ សៀវភៅនេះបង្រៀនយូនីកជាពិសេសបេសសៀ (អ៊ូប៊ុនទូ) Bash Plell, Python, HTML, CSS, JavaScript និងកញ្ចប់កម្មវិធីមានប្រយោជន៍មួយចំនួនសម្រាប់កម្មវិធីដែលមានសារៈប្រយោជន៍ដូចជា git និង ffmpeg ។ ខ្ញុំក៏នឹងបង្រៀនអ្នកពីវិធីធ្វើពាណិជ្ជកម្មគ្រីបយ៉ាងស្វាហាប់ដោយស្វ័យប្រវត្តិនិងយកការបង់ប្រាក់ក្នុងកាតឥណពន្ធធម្មតាឬពីកាតឥណពន្ធធម្មតាខណៈពេលដែលថែទាំអ្នកទស្សនារបស់អ្នកនូវចំណែកនៃប្រាក់ចំណូលរបស់អ្នកប្រសិនបើអ្នកជ្រើសរើសធ្វើ។ ខ្ញុំនឹងបង្រៀនអ្នកពីរបៀបរកលុយពីគេហទំព័ររបស់អ្នកតាមរយៈការផ្សាយពាណិជ្ជកម្មផងដែររបៀបរៀបចំកម្មវិធីរបស់អ្នកសម្រាប់ម៉ាស៊ីនស្វែងរកនិងធ្វើឱ្យវាលឿនក្នុងចំណាត់ថ្នាក់ដំបូងសម្រាប់អ្វីដែលអតិថិជនរបស់អ្នកស្វែងរកការស្វែងរកជាច្រើនតាមដែលអាចធ្វើទៅបាន។ ខ្ញុំនឹងបង្រៀនអ្នកពីរបៀបលក់កម្មវិធីរបស់អ្នកផ្សាយពាណិជ្ជកម្មនេះសូមអំពាវនាវដល់អតិថិជនដែលកំពុងស្វែងរកសេវាកម្មរបស់អ្នកនិងបង្កើតឈ្មោះដោយខ្លួនឯងនៅលើអ៊ីនធឺណិតតាមរយៈមធ្យោបាយដែលមានតំលៃថោកគឺមានតំលៃថោកហើយធ្វើការបានល្អ។ ខ្ញុំនឹងបង្រៀនអ្នកពីវិធីរក្សាទុកទិន្នន័យរបស់អ្នកនៅលើកុំព្យួទ័រពពកដែលមានប្រសិទ្ធភាពសម្រាប់អ្នកហើយធ្វើឱ្យអ្នកប្រើប្រាស់របស់អ្នកមានរបៀបរៀបចំរបស់អ្នកនៅលើគេហទំព័ររបស់អ្នកនៅពីក្រោយការចុចប៊ូតុងរបស់អ្នក។ សៀវភៅនេះផ្តោតលើការអនុវត្តជាក់ស្តែងនៃការបោះពុម្ពផ្សាយនិងចែកចាយប្រព័ន្ធផ្សព្វផ្សាយដែលមានបរិមាណច្រើនពីការធ្វើឱ្យមានចំណាប់អារម្មណ៍របស់អ្នក (អតិថិជនរបស់អ្នក) ដែលអ្នកតំណាងរបស់អ្នកនិងក្រុមហ៊ុនរបស់អ្នកមើលទៅល្អតាមវិធីល្អបំផុតដែលអាចធ្វើទៅបាន។ អ្នកក៏នឹងរៀនគន្លឹះនិងល្បិចពីរបីពីខ្ញុំពីការសរសេរកូដភាពឥតប្រយោជន៍ភាពជាក់ស្តែងដូចជាការតុបតែងមុខនិងការសម្តែងដែលអាចរកបានដោយមិនចាំបាច់ខិតខំប្រឹងប្រែងការងារឬប្រាក់ច្រើនជាងអ្វីដែលចាំបាច់។ សៀវភៅនេះត្រូវបានគេហៅថា "ជាក់ស្តែងការរៀននិងសុវត្ថិភាពយ៉ាងជ្រាលជ្រៅតាមគេហទំព័រ "ដោយហេតុផល: វាទាក់ទងនឹងការរៀនក្រមភ័ស្តុតាងជាក់លាក់ដែលមានចែងថាតើធ្វើដូចម្តេចដើម្បីគ្រប់គ្រងការយល់ដឹងអំពីការទទួលស្គាល់មុខមាត់មុខមាត់ផ្ទៃមុខនៃផ្ទៃមុខការធ្វើឱ្យប្រសើរឡើងរូបភាព ការលើកកម្ពស់ការពង្រឹងចំណងជើងរូបភាពនិងការងារផ្សេងទៀតដូចជាការទស្សន៍ទាយរូបភាពដូចជាធម្មជាតិនៃរូបភាពដែលមានលក្ខណៈពិសេសនៃការរៀនតាមអ៊ីនធឺណិតប៉ុន្តែវាអាចចូលប្រើលេខកូដសម្ងាត់ប៉ុន្តែវាអាចមានសុវត្ថិភាពក្នុងការប្រើវាជាមួយអ្នក មុខ។ អ្នកអាចធ្វើឱ្យកុំព្យូទ័ររបស់ម៉ាស៊ីនមេនេះមានសុវត្ថិភាពដែលជាធម្មតានឹងសួរអ្នកនូវឈ្មោះអ្នកប្រើនិងប្រើកម្មវិធីរបស់អ្នកដែលមានអនុភាពវាមិនគ្រប់គ្រាន់ទេក្នុងការធ្វើឱ្យកម្មវិធីរបស់អ្នកមានសុវត្ថិភាពឬអ្នកណាម្នាក់ដែលអ្នកប្រើ) ។ អ្នកដែលសាងសង់សូហ្វវែរដែលមានសុវត្ថិភាពមិនគួរឱ្យជឿមានអត្ថន័យនៃអ្វីដែលនេះបង្កប់ន័យ។ សូហ្វវែរគឺមិនមានសុវត្ថិភាពទេពីព្រោះឧបករណ៍និងគណនីដែលយើងប្រើដើម្បីចូលប្រើវាមិនតែងតែមានការលះបង់របស់យើងទេពួកគេអាចស្ថិតនៅក្នុងដៃរបស់អ្នកដែលមានចេតនាមិនល្អសម្រាប់កម្មវិធីដោយខ្លួនឯង។ នេះគឺជាអ្វីដែលផ្តោតអារម្មណ៍នៃសៀវភៅនេះ។ បណ្តាញដែលមានបណ្តាញគឺនៅតាមលំនាំដើមដែលមានសុវត្ថិភាពជាមួយនឹងនិមិត្តសញ្ញាដ៏វែងមួយដែលគេហៅថានិង ssh គ្រាប់ចុចសែលហើយបើមិនដូច្នេះទេវាល្អបំផុតជាមួយម៉ាស៊ីនបម្រើគេហទំព័រផ្តល់នូវការចូលដំណើរការក៏ដូចជាឧបករណ៍សុវត្ថិភាពសិល្បៈដែលដំណើរការលើម៉ាស៊ីនមេដោយខ្លួនវាផ្ទាល់។ ម៉ាស៊ីនមេគេហទំព័រមានសិទ្ធិចូលប្រើកម្មវិធីអ៊ីនធឺណិតរបស់អ្នកប្រើដែលជាផ្នែកដ៏មានឥទ្ធិពលបំផុតនៃឧបករណ៍របស់អ្នកប្រើប្រាស់ពីព្រោះវាជាកន្លែងដែលអ្នកប្រើប្រាស់អាចចូលប្រើកម្មវិធីដែលមានបណ្តាញ។ ប្រអប់ឧបករណ៍នេះអាចបង្ហាញអត្ថបទគេហទំព័រដែលអ្នកបានឃើញហើយអាចកត់ត្រារូបភាពអូឌីយ៉ូនិងលេខសម្គាល់របស់រដ្ឋដែលអាចអានបានដែលមានលេខសៀរៀលដែលមានលក្ខណៈពិសេសនិងមានសុពលភាពដោយម៉ាស៊ីនមេគេហទំព័រដែលភ្ជាប់ជាមួយគេហទំព័រ។ ការប្រើប្រាស់ឧបករណ៍ទាំងអស់ដែលអ្នកបានបោះចោលជាមួយសៀវភៅនេះអ្នកនឹងបំពាក់ឱ្យខ្លួនអ្នកនូវចំណេះដឹងដើម្បីបង្កើតប្រព័ន្ធកុំព្យួទ័រដែលមានសុវត្ថិភាពហើយជារួមមួយដែលមានសុវត្ថិភាពដែលដំណើរការសម្រាប់អ្នកតើការដេញថ្លៃរបស់អ្នក, តើអ្នកដេញថ្លៃនិងមើលទៅ
កន្លែងដែលត្រូវចាប់ផ្តើម: អ្នកត្រូវបានស្វាគមន៍ឱ្យរំលងអតីតកាលខ្ញុំចាប់ផ្តើមសៀវភៅនេះដោយមានលេខកូដដែលអ្នកត្រូវការជាពិសេសប្រសិនបើអ្នកមានបទពិសោធជាមួយឧបករណ៍ដែលបានរៀបរាប់ខាងលើឬមានព័ត៌មានលម្អិតអំពីករណីប្រើប្រាស់ឯកសារនិងឧទាហរណ៍ជាក់ស្តែង។ ប្រសិនបើអ្នកមិនមានបទពិសោធក្នុងការសរសេរកូដទេខ្ញុំសូមផ្តល់អនុសាសន៍ឱ្យអ្នកអានសៀវភៅទាំងអស់នេះហើយជាពិសេសណែនាំឱ្យអ្នកអានផ្នែកមុន ៗ ដើម្បីប្រាកដថាសៀវភៅនេះត្រឹមត្រូវសម្រាប់អ្នក។ ប្រសិនបើសៀវភៅនេះមិនត្រឹមត្រូវសម្រាប់អ្នកសូមពិចារណាផ្តល់អំណោយដល់មិត្តភក្តិឬសាច់ញាតិដែលប្រហែលជាចាប់អារម្មណ៍ក្នុងការអភិវឌ្ឍគេហទំព័រដោយខ្លួនឯងហើយថែមទាំងគិតពីពួកគេវិញដើម្បីបំពេញអ្នកស្រីឬគ្រូផ្សេងទៀតបានធ្វើនៅចំពោះមុខខ្ញុំ។ ចាប់ផ្តើមកន្លែងដែលអ្នកនឹងមានគ្រប់ផ្នែកទាំងអស់នៃសៀវភៅនេះនឹងមានប្រយោជន៍ប្រសិនបើអ្នកមានបំណងបង្កើតកម្មវិធីដែលមានប្រយោជន៍ហើយពិចារណាថាកម្មវិធីល្អបំផុតត្រូវបានបង្កើតឡើងដោយប្រើអ្នកប្រើចុងក្រោយ: ស្គាល់អតិថិជនរបស់អ្នក។ ឥឡូវអ្នកស្គាល់ខ្ញុំអ្នកស្គាល់សៀវភៅនេះហើយអ្នកបានត្រៀមខ្លួនរួចរាល់ហើយ។ ដើម្បីចាប់ផ្តើមចាប់យកកុំព្យួទ័រ (សូម្បីតែកុំព្យូទ័រយួរដៃដែលមានតំលៃថោកបំផុតពីហាងប្រអប់មួយក៏ដោយអាម៉ាហ្សូនឬផ្ទៃតុចាស់ដំណើរការហើយកំណត់វាតាមរបៀបដែលដំណើរការសម្រាប់អ្នក។របៀបអានសៀវភៅនេះ: អត្ថបទដែលបានបន្លិចបង្ហាញថាអត្ថបទជាកម្មសិទ្ធិរបស់ប្រអប់បញ្ចូលពាក្យបញ្ជាដែលអ្នកនឹងសរសេរលេខកូដដែលអ្នករត់។ ប្រអប់បញ្ចូលពាក្យបញ្ជាគឺមានក្តារចុចយ៉ាងខ្លាំងផ្តោតសំខាន់ហើយតម្រូវឱ្យមានការចុចតិចតួចដោយមិនប្រើលំហូរការងាររបស់អ្នកហើយធ្វើឱ្យអ្វីៗកាន់តែងាយស្រួលលើអ្នក។
ការចាប់ផ្តើម: សូមចូលទៅក្នុង។ យើងនឹងចាប់ផ្តើមដោយក្រមបង្កើតលេខកូដនៅលើម៉ាស៊ីនក្នុងស្រុកហើយចាប់ផ្តើមដោយមិនបង្កើតគេហទំព័រដែលភ្ជាប់ទៅអ៊ីនធឺណិត។ នេះមានសុវត្ថិភាពជាងមុនក្នុងការចាប់ផ្តើមគិតថ្លៃមិនចំណាយអ្វីទាំងអស់ហើយងាយស្រួលសម្រាប់អ្នក។ ដោយផ្អែកលើប្រព័ន្ធប្រតិបត្តិការរបស់អ្នក, ការចូលទៅក្នុងសំបក bash នឹងខុសគ្នាបន្តិចបន្តួច។ សម្រាប់ Mac OS ខ្ញុំសូមណែនាំឱ្យដំឡើងម៉ាស៊ីននិម្មិតនៅចំណុចនេះដូចដែលអ្នកនឹងទទួលបានភាពឆបគ្នាបំផុតជាមួយម៉ាស៊ីននិម្មិត។ អ្នកផ្តល់សេវាផ្សេងៗដូចជា VirtualBox និង Paralells អាចដំណើរការម៉ាស៊ីននិម្មិតសម្រាប់អ្នកទោះបីជាវាអាចដំឡើងអ៊ូប៊ុនទូដោយផ្ទាល់នៅលើម៉ាស៊ីនក៏ដោយប្រសិនបើអ្នកចូលចិត្តប្រើបរិយាកាសដើមដែលត្រូវបានណែនាំឱ្យបង្កើតបទពិសោធខ្ពស់ដែលបានបង្កើតឡើង។ ប្រសិនបើអ្នកកំពុងប្រើលីនុចឬវីនដូដែលខ្ញុំណែនាំវាគួរតែងាយស្រួលក្នុងការបង្កើតគម្រោង។ បើកស្ថានីយរបស់អ្នកកែសំរួលទំហំដូចអ្នកឃើញថាសមហើយចាប់ផ្តើមដើរតាមជំហានទី 2 ប្រសិនបើអ្នកកំពុងប្រើវីនដូសូមធ្វើតាមជំហានទី 1 ។ជំហានទី 1 ៈអ្នកប្រើប្រាស់វីនដូតែប៉ុណ្ណោះ នៅក្នុងវីនដូបើកប្រអប់បញ្ចូលពាក្យបញ្ជាជាអ្នកគ្រប់គ្រងនិងប្រភេទ WSL -install
ជំហានទី 2: បន្តនៅទីនេះឬរំលងជំហានទី 1 ទៅទីនេះប្រសិនបើអ្នកមិនប្រើវីនដូ នៅក្នុងស្ថានីយបើកចំហ (អាស្រ័យលើប្រព័ន្ធប្រតិបត្តិការរបស់អ្នកហៅថាអ៊ូប៊ុនទូនៅក្នុងវីនដូស្ថានីយនៅក្នុង Mac ឬលីនុចឬឈ្មោះស្រដៀងគ្នា) ចាប់ផ្តើមដោយបង្កើតគម្រោង។ យើងធ្វើវាជាមួយពាក្យបញ្ជា MKDir ដែលបង្កើតថតឯកសារមួយ។ ប្រសិនបើអ្នកត្រូវការបង្កើតថតឯកសារដើម្បីរក្សាទុកគម្រោងរបស់អ្នកដែលត្រូវបានណែនាំសូមប្រើពាក្យបញ្ជាស៊ីឌីដើម្បីប្តូរទៅថតឯកសារនិងស៊ីឌី / ផ្លូវ / ទៅថត - ផ្លូវគឺជាថតឯកសារ (ឯកសារ) ដែលមានមុនថតទិសដៅលំនាំដើមរបស់អ្នកគឺ ~ ឬ / ផ្ទះ / ឈ្មោះអ្នកប្រើឈ្មោះអ្នកប្រើរបស់អ្នក) ។ ដើម្បីប្តូរទៅថតលំនាំដើមវាយស៊ីឌីឬស៊ីឌី ~ ឧទាហរណ៏ឧទាហរណ៍ - ជំនួស "ឧទាហរណ៍" ដែលមានឈ្មោះថត
ឥឡូវអ្នកមានថតការងារសម្រាប់គម្រោងរបស់អ្នក។ ក្នុងនាមវាមានសារៈសំខាន់ណាស់ដែលត្រូវបានរក្សាទុកថតនេះក្នុងករណីដែលអ្នកត្រូវការប្តូរទៅម៉ាស៊ីនផ្សេងឬដាក់ពង្រាយលេខកូដដែលអ្នកបានសរសេរដូច្នេះយើងនឹងបង្កើតស្គ្រីបដើម្បីបម្រុងទុកថតឯកសាររបស់អ្នកនៅជំហានពីរបីបន្ទាប់។ ប៉ុន្តែការកសាងស្គ្រីបត្រូវការលេខកូដបន្តិចបន្តួចហើយលេខកូដចាំបាច់ត្រូវបានស្វ័យប្រវត្ដិដែលមានប្រយោជន៍ឱ្យមានប្រយោជន៍តាមដែលអាចធ្វើទៅបាន។ ដូច្នេះសូមបង្កើតស្គ្រីបដើម្បីបង្កើតស្គ្រីបជាមុនសិន។ ចូរចាប់ផ្តើមដោយការបង្កើតស្គ្រីបហើយធ្វើឱ្យវាអាចប្រតិបត្តិបាន។ យើងនឹងប្រើសូដូដូ, Chmod និង Touch សម្រាប់នេះហើយហៅស្គ្រីប "Accript" ។ស៊ូដូទូច / usr / bin / ascript Sudo Chmod A + X / usr / bin / Ascript ស៊ូដូណាណូ / usr / bin / ascript
ឥឡូវនេះយើងបានបង្កើតស្គ្រីបធ្វើឱ្យវាអាចប្រតិបត្តិបានហើយត្រៀមខ្លួនកែសម្រួលវា។ ណាណូគឺជាអ្នកកែសម្រួលអត្ថបទដែលនឹងអនុញ្ញាតឱ្យអ្នកកែសម្រួលអត្ថបទដោយមិនចាំបាច់ចុចដែលងាយស្រួលជាងការប្រើចំណុចប្រទាក់អ្នកប្រើក្រាហ្វិច។ ដើម្បីកែសម្រួលឯកសារមួយជាមួយណាណូប្រើណាណូហើយបន្ទាប់មកផ្លូវទៅកាន់ឯកសារ។ ដើម្បីធ្វើស្គ្រីបដែលធ្វើស្គ្រីបវាស្រដៀងនឹងការធ្វើឱ្យស្គ្រីបរបស់យើងនៅកន្លែងដំបូង។ យើងនឹងប្រើលេខកូដដូចខាងលើទៀតដោយជំនួសឈ្មោះស្គ្រីប "Iscript" ជាមួយនឹងប៉ារ៉ាម៉ែត្រអាគុយម៉ង់ 1 ដុល្លារ។ នេះអនុញ្ញាតឱ្យយើងហៅអត្ថបទដោយវាយអត្ថបទ ascript sudo ដោយគ្រាន់តែចុចលើអត្ថបទថ្មីណាមួយដោយជំនួស "រូបតំណាង" ដែលមានឈ្មោះរបស់ស្គ្រីបរបស់អ្នក។ លេខកូដនៅណាណូគួរតែមើលទៅដូចជា:ស៊ូដូទូច / usr / bin / $ 1 Sudo Chmod a + X / usr / bin / $ 1 Sudo Nano / usr / bin / $ 1
ហើយដើម្បីបិទ Nano យើងអាចសង្កត់គ្រាប់ចុចត្រួតពិនិត្យហើយចុច x, បន្ទាប់មក y ដើម្បីបញ្ជាក់យើងកំពុងរក្សាទុកឯកសារហើយវាយត្រឡប់មកវិញ។ ឥឡូវជំនួសឱ្យការវាយពាក្យបញ្ជាទាំងបីនេះដើម្បីកែសម្រួលស្គ្រីបយើងនឹងអាចវាយអក្សរ Ascript ascript ascript ដើម្បីកែសម្រួលស្គ្រីបម្តងទៀត។ ការងារនេះដំណើរការ! ហើយស្គ្រីបថ្មីណាមួយអាចដំណើរការបានយ៉ាងងាយស្រួលដោយហៅវានៅក្នុងសែល។ សូមរក្សាទុកការងាររបស់យើងឥឡូវនេះ: តោះសរសេរស្គ្រីបបម្រុងទុកដើម្បីរក្សាទុកស្គ្រីបថ្មីរបស់យើងហើយបន្ទាប់មកគាំទ្រវានៅក្នុងថតឯកសាររបស់យើងខណៈពេលដែលកំពុងគាំទ្រស្គ្រីបបម្រុងទុក។ការបម្រុងទុក ASCRIPP របស់ Sudo
ឥឡូវនេះនៅណាណូ:Sudo CP / USR / bin / backup / Path / ទៅកាន់ថតឯកសារ / Sudo CP / USR / bin / ascript / Ath / Path / To Report /
កន្លែងណា / ផ្លូវ / ទៅ / ថតគឺជាផ្លូវទៅកាន់គម្រោងដែលអ្នកបានបង្កើតជាមួយ MKDIR ។ ក្រោយមកទៀតយើងនឹងរៀនពីរបៀបចម្លងផ្លូវម្តងទៀតដូចនេះជាមួយនឹងរង្វិលជុំនិងបញ្ជីដែលមានលេខកូដតិចប៉ុន្តែសម្រាប់ពេលនេះសូមរក្សាវាឱ្យសាមញ្ញហើយមានបន្ទាត់ពីរបី។ ដើម្បីដំណើរការស្គ្រីបនេះហើយបម្រុងទុកកូដរបស់អ្នករក្សាទុកឯកសារនៅណាណូដោយបញ្ជា + x, y ហើយត្រឡប់ហើយវាយអក្សរខាងក្រោមទៅក្នុងសែលរបស់អ្នកបបបមហ្ចប់
ប្រសិនបើអ្នកត្រូវបានគេសួររកអ្វីទាំងអស់សម្រាប់លេខសម្ងាត់ខណៈពេលកំពុងអានសៀវភៅនេះហើយដើរតាមសែលសូមបញ្ចូលពាក្យសម្ងាត់អ្នកប្រើរបស់អ្នកឱ្យបានត្រឹមត្រូវអ្នកនឹងត្រូវព្យាយាមបីដងមុនពេលអ្នកត្រូវការដំណើរការពាក្យបញ្ជាឡើងវិញ។ អ្នកអាចប្រើព្រួញឡើងលើនិងចុះក្រោមទៅពាក្យបញ្ជារបស់ Rerun ហើយកែសម្រួលវាតើអ្នកត្រូវដំណើរការអ្វីពីរដង។ ចុចប៊ូតុងចុចសាមញ្ញនិងចុះក្រោមដើម្បីជ្រើសរើសពាក្យបញ្ជាមុនពេលកែសម្រួលពាក្យបញ្ជាដោយមានព្រួញឆ្វេងនិងលុបគ្រាប់ចុចក៏ដូចជាក្តារចុចហើយដំណើរការវាត្រឡប់មកវិញ។អបអរសាទរ! អ្នកបានគ្រប់គ្រងដើម្បីបង្កើតស្គ្រីបបម្រុងទុកដ៏អស្ចារ្យដែលគាំទ្រស្គ្រីបសែលសំខាន់ពីរនៅក្នុងថតការងាររបស់អ្នក។ យើងអាចផ្លាស់ប្តូរអ្វីៗនៅជុំវិញពេលក្រោយនៅពេលគម្រោងកាន់តែធំប៉ុន្តែនេះដំណើរការសម្រាប់ពេលនេះ។ តោះបម្រុងទុកពពកឡើងលើពពកយើងនឹងប្រើ Github សម្រាប់ការបម្រុងទុករបស់វាសម្រាប់ការបម្រុងទុកពួកគេគឺដូចគ្នានេះដែរ។ វាគឺជាឧបករណ៍ក្នុងការរក្សាទុកកម្មវិធីរបស់អ្នកជាពិសេសនៅពេលដែលយើងធ្វើចំណាកស្រុកដើម្បីធ្វើឱ្យអ្នកមានលេខកូដបានបរាជ័យដោយមិនត្រូវបានបម្រុងទុកប្រសិនបើអ្នកមិនមានឱកាសត្រឡប់មកវិញដោយស្វ័យប្រវត្តិដែលយើងនឹងគ្របបាំងវាដោយស្វ័យប្រវត្តិ។
ប្រសិនបើអ្នកមិនទាន់បានប្រើម៉ាស៊ីននិម្មិតអ៊ូប៊ុនទូដែលមានរួចហើយទេខ្ញុំបានរកឃើញម៉ាស៊ីននិម្មិតអ៊ូប៊ុនទូយានិកនៅចំណុចនេះព្រោះវានឹងធ្វើឱ្យជីវិតរបស់អ្នកកាន់តែងាយស្រួលនៅពេលដំឡើងកញ្ចប់ដែលចាំបាច់ដើម្បីបង្កើតគេហទំព័រដែលកំពុងធ្វើការនិងប្រតិបត្តិការសិក្សាយ៉ាងជ្រៅនៅលើកុំព្យូទ័ររបស់អ្នក។ យើងនឹងផ្លាស់ប្តូរលេខកូដទៅម៉ាស៊ីនមេគេហទំព័រមួយនាពេលអនាគតប៉ុន្តែយើងចង់ធ្វើឱ្យប្រាកដថាមានសុវត្ថិភាពយ៉ាងហោចណាស់ពីរបីស្រទាប់នៃសុវត្ថិភាពនៅពីក្រោយម៉ាស៊ីនមេគេហទំព័ររបស់យើងដែលមានភាពធន់ទ្រាំទៅនឹងការឆបោកនិងប្រើកញ្ចប់លីនុចមួយចំនួនដើម្បីធ្វើដូចនេះ។ ប្រសិនបើអ្នកនៅតែចង់ប្រើ Mac OS អ្នកត្រូវបានស្វាគមន៍ក្នុងការស្វែងរកនិងតំឡើងកញ្ចប់ចាំបាច់តាមអ៊ិនធរណេតប៉ុន្តែប្រហែលជាមិនមានជម្រើសសម្រាប់រាល់កញ្ចប់ឬស៊េរីទេដែលនឹងគ្របដណ្ដប់។តោះបន្ថែមពាក្យបញ្ជាមួយចំនួនដើម្បីប្តេជ្ញាការងាររបស់យើងជាមួយស្គ្រីបបម្រុងទុកដោយដំណើរការពាក្យបម្រុងទុករបស់ Sudo Backup ។
# ... git បន្ថែម -all git ប្តេជ្ញាចិត្ត -M "ការបម្រុងទុក" មេដែលមានដើមកំណើតជម្រុញ -U...
ជាថ្មីម្តងទៀតគ្រប់គ្រង x ដើម្បីរក្សាទុក។sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
ឥឡូវនេះយើងត្រូវធ្វើការកំណត់រចនាសម្ព័ន្ធពេលវេលាមួយសម្រាប់គម្រោងនេះ។ ដោយសារតែវានឹងក្លាយជាគម្រោង git យើងមិនចាំបាច់វាយពាក្យបញ្ជាទាំងអស់រាល់ពេលដែលយើងដាក់ពង្រាយពីឃ្លាំង GIT ទេប៉ុន្តែយើងនឹងទទួលបានការព្យួរនេះនៅពេលយើងសរសេរស្គ្រីបដាក់ពង្រាយរបស់យើង។ ដើម្បីចាប់ផ្តើមសូមប្រាកដថាយើងស្ថិតនៅក្នុងថតខាងស្តាំហើយចាប់ផ្តើមឃ្លាំង git ហើយបង្កើត SSH SSH ។ស៊ីឌី / ផ្លូវ / ទៅ / ថត init init នេះ GIT សាខា -m ម៉ាស្ទឺរ ssh-keygen
បន្ទាប់ពីយើងវាយ ssh-keygen កូនសោថ្មីគួរតែត្រូវបានរក្សាទុកនៅក្នុងថតឯកសារផ្ទះក្រោមថតឯកសារដែលមានឈ្មោះថា .ssh ។ វាត្រូវបានគេហៅថា id_rsa.pub ។ ចូរយើងស្វែងរកកូនសោនេះហើយចម្លងវា។ ដើម្បីមើលវា,sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
ស៊ីឌី ~
ឆ្មា .ssh / id_rsa.pubចម្លងអត្ថបទដែលត្រូវបានត្រឡប់ដោយពាក្យបញ្ជាចុងក្រោយហើយបង្កើតគណនីជាមួយអ្នកផ្តល់ GIT របស់អ្នក (ឧត្តមគតិ Github) មុនពេលបន្ថែមកូនសោ SSH ទៅក្នុងគណនីរបស់អ្នក។ នៅពេលដែលអ្នកមានគណនីសូមចុចលើមឺនុយខាងលើខាងស្តាំហើយបញ្ចូលការកំណត់មុនពេលបន្ថែមកូនសោ SSH របស់អ្នកក្នុងគ្រាប់ចុច SSH និង GPG ក្រោមការចូលប្រើនៅក្នុងមឺនុយ។ ជ្រើសបន្ថែមកូនសោ SSH ហើយបន្ថែមរបស់អ្នកដោយបិទភ្ជាប់វាចូលហើយផ្តល់ឱ្យវានូវចំណងជើងមុនពេលរក្សាទុកនិងត្រលប់ទៅ GitHub ដើម្បីបង្កើតឃ្លាំងថ្មី។ នេះគឺស្រដៀងគ្នាសម្រាប់អ្នកផ្តល់ GIT GIT ផ្សេងទៀតអ្នកត្រូវអានឯកសាររបស់ពួកគេ។ នៅក្នុងការកំណត់រចនាសម្ព័ន្ធឃ្លាំងថ្មីសូមផ្តល់ឈ្មោះឃ្លាំងរបស់អ្នកនូវឈ្មោះពិពណ៌នាមួយហើយសម្រេចចិត្តថាតើអ្នកចង់ផ្សព្វផ្សាយវាហើយត្រូវប្រាកដថាកំណត់រចនាសម្ព័ន្ធគ្មានឯកសារសម្រាប់ដាក់បញ្ចូលនៅឡើយទេ។ នៅពេលដែលឃ្លាំងត្រូវបានបង្កើតឡើងសូមចម្លងក្លូនដោយប្រើអេសអេសអេលហើយបិទភ្ជាប់វាទៅក្នុងពាក្យបញ្ជាខាងក្រោម។
GIT ពីចម្ងាយបន្ថែម GIT: // ... (URL ពីចម្ងាយរបស់អ្នក)sudo ascript backup
ឥឡូវអ្នកអាចប្តូរទៅឃ្លាំងរបស់អ្នកជាមួយស៊ីឌីអ្នកនឹងស្គាល់វា។ សាកល្បងស្គ្រីបបម្រុងទុករបស់អ្នកឥឡូវនេះជាមួយការបម្រុងទុកអស្ចារ្យ! ឥឡូវនេះយើងពិតជាអាចរកបានការសរសេរកូដ។ តោះតំឡើង Django ឥឡូវនេះថាយើងមានការយល់បានល្អនៅលើ bash និង git ។ Django នឹងអនុញ្ញាតឱ្យយើងបម្រុងទុកកម្មវិធីរបស់យើងដោយស្វ័យប្រវត្តិ, bash អាចធ្វើបានផងដែរប៉ុន្តែ Django គួរតែមានការអនុវត្តប្រកបដោយសុវត្ថិភាពសាមញ្ញ (វាអាចត្រូវបានបិទនិងកំណត់រចនាសម្ព័ន្ធកាន់តែងាយស្រួល) ។
ដើម្បីដំឡើងកម្មវិធីនៅក្នុងអ៊ូប៊ុនទូយើងនឹងប្រើពាក្យបញ្ជាស៊ូដូអេមអេសអេសអេស។ ដំបូងចូរយើងធ្វើបច្ចុប្បន្នភាពនិងធ្វើឱ្យប្រសើរឡើងនូវកម្មវិធីដែលយើងមានរួចហើយ។ នេះអាចត្រូវបានធ្វើរួចជាមួយ Sudo Apt-Get-Get-Get-Get-Get-Get-Get-Get-Get-Degrade -y ។ បន្ទាប់មកទៀតតោះតំឡើង Python និងបរិស្ថានជាក់ស្តែងរបស់យើងដែលជាមតិយោបល់របស់យើងដែលមានពាក្យបញ្ជាដូចខាងក្រោមៈ Sudo apt-get ដំឡើង Python-IS-Python3 Python3-Venvsudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
នេះគឺជាអ្វីដែលអ្នកត្រូវការដើម្បីទៅជាមួយ Django ទាក់ទងនឹងកម្មវិធីតំឡើងក្នុងកម្មវិធីអ៊ូប៊ុនទូ។ សម្រាប់វីនដូនិងលីនុចនេះគួរតែមានភាពត្រង់ប៉ុន្តែសម្រាប់ម៉ាក់អ្នកប្រហែលជាចង់ដំឡើងម៉ាស៊ីននិម្មិតនិងលីនុចលើវាដោយប្រើផ្ទៃតុ VirtualBox ឬបង្កើតជំហានខាងលើដើម្បីរៀបចំបរិស្ថានអ៊ូប៊ុនទូ។ អ៊ូប៊ុនទូមានសារៈសំខាន់ក្នុងករណីនេះពីព្រោះវាគឺជាកម្មវិធីដែលគេហទំព័រដំណើរការហើយវាអាចឱ្យពួកគេធ្វើជាម្ចាស់ផ្ទះគេហទំព័រដែលមានសូហ្វវែរទាំងអស់ដែលបានរៀបរាប់ខាងលើ។តោះជីកចូលទៅក្នុង Django ។
នៅក្នុងថតរបស់យើងម្តងទៀតជាមួយស៊ីឌី:backup
Python -M Venv Venv # បង្កើតបរិយាកាសនិម្មិតដែលលេខកូដរក្សាទុក
ប្រភព Venv / bin / Active # សកម្ម # សកម្មប្រយុទ្ធនៃបរិស្ថាននិម្មិត
PIP តំឡើង Django
Django-admin StartProject MySite ។ # កន្លែងដែល mysite គឺជាគម្រោងដែលខ្ញុំកំពុងចាប់ផ្តើមនៅក្នុងថតបច្ចុប្បន្នរបស់ខ្ញុំ។បង្កើតបរិយាកាសនិម្មិតដែលលេខកូដរក្សាទុក
ធ្វើឱ្យសកម្មបរិយាកាសនិម្មិតកន្លែងដែល mysite គឺជាគម្រោងដែលខ្ញុំកំពុងចាប់ផ្តើមនៅក្នុងថតបច្ចុប្បន្នរបស់ខ្ញុំ។
Django ទើបតែធ្វើឱ្យយើងចាប់ផ្តើមប៉ុណ្ណោះព្រោះ Django កំពុងបង្ហោះម៉ាស៊ីនមេគេហទំព័រហើយកំពុងធ្វើអ្វីគ្រប់យ៉ាងដែលយើងត្រូវការដើម្បីទទួលបានគេហទំព័រក្នុងស្រុកមួយដែលកំពុងដំណើរការហើយកំពុងដំណើរការ។ ឥឡូវយើងបានតំឡើង Django ដំឡើងរួចសូមកែសម្រួលការកំណត់បន្តិចដើម្បីធ្វើឱ្យវាដំណើរការនូវរបៀបដែលយើងត្រូវការ។ ដំបូងចូរយើងបង្កើតកម្មវិធីថ្មីPython Manage.py startapp ចិញ្ចឹម
អ្នកនឹងកត់សំគាល់កម្មវិធីដំបូងត្រូវបានគេហៅថាមតិព័ត៌មាន។ កម្មវិធីនេះគួរតែត្រូវបានគេហៅថាអ្វីដែលអ្នកចូលចិត្តហើយយើងនឹងបង្កើតកម្មវិធីថ្មីប៉ុន្តែឈ្មោះនៃកម្មវិធីនីមួយៗត្រូវតែមានភាពស៊ីគ្នារាល់ពេលដែលកម្មវិធីត្រូវបានយោងនៅក្នុងក្រម។ ដើម្បីបន្ថែមកម្មវិធីថ្មីយើងនឹងកែសម្រួលការកំណត់ដែលបានបង្កើតកម្មវិធីផ្សេងទៀតដែលបានបង្កើតក្នុងការចាប់ផ្តើមកម្មវិធី StartProject ។ ការប្រើប្រាស់ណាណូ,Nano App / Settings.py
នៅក្នុងការកំណត់រកបានការដំឡើង updusted_apps ហើយបំបែករបស់ [] ទៅ 3 បន្ទាត់។ ដោយប្រើចន្លោះបួននៅលើបន្ទាត់កណ្តាលទទេបន្ថែម 'មតិព័ត៌មាន' ឬឈ្មោះរបស់កម្មវិធីរបស់អ្នក។ ផ្នែកនៃការកំណត់នេះគួរតែមើលទៅដូច:# busted_Apps = [
'ចំណី',
តមយយរសយល
មុនពេលដែលយើងភ្លេចសូមសាកល្បងថា Django កំពុងធ្វើការ។ ការប្រើពាក្យបញ្ជា Python គ្រប់គ្រងកម្មវិធី 0.0.0.0PY, យើងអាចដំណើរការម៉ាស៊ីនមេហើយបន្ទាប់មករុករកក្នុងកម្មវិធីរុករកគេហទំព័រដែលកំពុងដំណើរការលេខកូដទៅ http: 8000 និងមើល!) ឈប់ប្រើ C ដែលមានលក្ខណៈដូចគ្នានឹងពាក្យបញ្ជាផ្សេងទៀត។ឥឡូវសូមជីកចូលក្នុងការសរសេរកូដ Python មួយចំនួន។ Django មានសមាសធាតុសំខាន់បីដែលពួកគេទាំងអស់ដំណើរការដោយលេខកូដទាំងស្រុង។ សមាសធាតុត្រូវបានគេហៅថាម៉ូដែល, ទិដ្ឋភាពទិដ្ឋភាពនិងគំរូ, ហើយនីមួយៗគឺនៅកម្រិតខ្ពស់និងទាបជាងមុន, មុនពេលគេហទំព័រត្រូវបានបញ្ជូនទៅអ្នកប្រើ។
ម៉ូដែលគឺជាកូដដែលផ្ទុកព័ត៌មាននៅក្នុងឃ្លាំងទិន្នន័យសម្រាប់ការទាញយកមកវិញការតម្រៀបនិងការបង្ហាញ។ទិដ្ឋភាពសម្រេចបានសំរេចថាតើម៉ូដែលត្រូវបានបង្ហាញយ៉ាងដូចម្តេចបានរៀបចំហើយបានកែប្រែស្ទើរតែគ្រប់ទិដ្ឋភាពទាំងអស់នឹងប្រើគំរូដោយផ្ទាល់។
គំរូគឺជាកូដ HTML ដែលមានកណ្តឹងបន្ថែមនិងហួចដែលហៅថាភាសាគំរូ។ គំរូនេះត្រូវបានបង្ហាញដោយទិដ្ឋភាពដែលវាត្រូវបានបំពេញដោយលេខកូដ Python និងបរិបទដូចជាម៉ូដែលនិងព័ត៌មាន (ខ្សែអក្សរនិងចំនួនគត់អាមេរិក) ពីទិដ្ឋភាព។cd /path/to/directory
git init
git branch -m master
ssh-keygen
Django មានសមាសធាតុផ្សេងទៀតផងដែររាប់បញ្ចូលទាំងប៉ុន្តែមិនមានកំណត់ចំពោះ:ការកំណត់ដែលកំណត់រចនាសម្ព័ន្ធកម្មវិធីដូចដែលយើងបានពិភាក្សា។
URLs ដែលជាគំរូដែលអ្នកប្រើប្រាស់ធ្វើតាមដើម្បីទទួលបានការចូលទៅកាន់ផ្នែកជាក់លាក់នៃកម្មវិធីគេហទំព័រ។cd ~
cat .ssh/id_rsa.pub
ទម្រង់ដែលកំណត់ថាតើព័ត៌មានដែលបានផ្ញើទៅម៉ាស៊ីនមេត្រូវបានដោះស្រាយនិងបង្ហាញទៅក្នុងប្រព័ន្ធទិន្នន័យក៏ដូចជាអ្នកប្រើប្រាស់។ ទាំងនេះគឺជាមូលដ្ឋានគ្រឹះនៃដំណើរការព័ត៌មាននៅផ្នែក Server ហើយអាចទទួលយកព័ត៌មានណាមួយប្រភេទហាងកុំព្យូទ័រខ្សែអក្សរអត្ថបទដែលគួរឱ្យកត់សម្គាល់លេខនិងប៊ូលីនពិត / ប្រអប់ (ប្រអប់ធីកធម្មតា) ។ពុម្ពដែលជាកូដ HTML និងភាសាគំរូនិងភ្ជាប់គម្លាតរវាង Python និង HTML មានន័យថាព័ត៌មាន HTML ដែលអ្នកអាចទទួលបាននូវការចូលប្រើរបស់ Python ដែលអាចចូលដំណើរការបាននៅលើឧបករណ៍ពីចម្ងាយដែលមិនចាំបាច់នៅក្បែរម៉ាស៊ីនមេ។
ឯកសារឋិតិវន្តដែលជាធម្មតា JavaScript និងបណ្ណាល័យរបស់វាដែលម៉ាស៊ីនមេបម្រើហើយភ្ជាប់ជាមួយគំរូ។git remote add git://… (your remote URL)
ឯកសារមេឌៀដែលម៉ាស៊ីនមេបម្រើការឬត្រូវបានបង្ហោះខាងក្រៅឬគ្រាន់តែសរសេរទៅម៉ាស៊ីនមេមុនពេលដំណើរការហើយបញ្ចូលទៅក្នុងម៉ាស៊ីនមេមួយទៀត (ដាក់ធុង) សម្រាប់បង្ហោះ។មូលដ្ឋានគ្រឹះដែលជាបំណែកនៃលេខកូដដែលដំណើរការក្នុងពេលតែមួយដូចគ្រប់ទិដ្ឋភាពទាំងអស់ហើយត្រូវបានចាត់ទុកថា "រួមបញ្ចូល" នៅក្នុងទិដ្ឋភាព។
ដំណើរការបរិបទដែលដំណើរការបរិបទនៃទិដ្ឋភាពនីមួយៗហើយត្រូវបានប្រើដើម្បីបន្ថែមបរិបទបន្ថែម។ការធ្វើតេស្តដែលមានសុពលភាពថាអ្នកប្រើប្រាស់ឬការស្នើសុំឆ្លងកាត់តម្រូវការជាក់លាក់មុនពេលមើល។
អតិថិជនដែលកំណត់របៀបដែល PsySECKETETS គ្រប់គ្រងនិងឆ្លើយតបចំពោះការប្រាស្រ័យទាក់ទង។រដ្ឋបាលដែលត្រូវបានប្រើដើម្បីចុះឈ្មោះម៉ូដែលដូច្នេះពួកគេអាចត្រូវបានរៀបចំឱ្យបានលំអិតនៅក្នុងទំព័រគ្រប់គ្រង Django ដែលជាកន្លែងដែលឃ្លាំងទិន្នន័យអាចគ្រប់គ្រងតាមរយៈចំណុចប្រទាក់ក្រាហ្វិក។
Celery ដែលកំណត់ភារកិច្ចអសមកាលផ្នែកនៃកូដ Django អាចចាប់ផ្តើមដំណើរការមុនពេលដំណើរការទៅភារកិច្ចបន្ទាប់ឬបន្ទាត់នៃកូដបន្ទាប់។Django អាចមានសមាសធាតុជាច្រើនទៀតដែលយើងនឹងពិភាក្សាលម្អិតនៅទីនេះ។ មានវិធីជាច្រើនដើម្បីធ្វើឱ្យ Django មានមុខងារបន្ថែមទៀត, បន្ថែម websockets ដែលមានប្រដាប់សំភារៈទំនាក់ទំនងយ៉ាងឆាប់រហ័ស, ដែលប្រកាន់ខ្ជាប់នូវកម្មវិធីមួយផ្សេងទៀត, ជាពិសេសមួយនៃកម្មវិធី, ជាពិសេសនៅក្នុងមុខងារនៃការមើលដែលលេខកូដភាគច្រើនត្រូវបានប្រតិបត្តិ។ ការមើលមុខងារគឺជាគន្លឹះពីព្រោះពួកគេច្រើនតែប្រកាសរាល់ក្រមនៃលេខកូដដែលជាក់លាក់ចំពោះលំនាំ URL ជាក់លាក់ឬផ្នែករបស់ម៉ាស៊ីនមេ។
ដំបូងយើងនឹងស្វែងយល់ពីមុខងារមើល។ មុខងារមើលចាប់ផ្តើមដោយការនាំចូលលេខកូដដែលអាចត្រូវបានប្រើក្នុងទិដ្ឋភាពហើយត្រូវបានកំណត់ដោយប្រើនិយមន័យមុខងារឬថ្នាក់ដែលមានមុខងារទៀងទាត់។ ការមើលសាមញ្ញបំផុតត្រូវបានកំណត់ដោយនិយមន័យមុខងារ Def, ហើយត្រឡប់ HTTProponse ដោយមានគំរូមូលដ្ឋាន។ ចូរចាប់ផ្តើមដោយកំណត់ទស្សនៈមូលដ្ឋានដើម្បីត្រឡប់អត្ថបទ "សួស្តីពិភពលោក" ។ ចងចាំថារាល់ពេលដែលអ្នកបន្ថែមលេខកូដបន្ទាប់ពីសេចក្តីថ្លែងការណ៍មួយដូចជា Def, ប្រសិនបើ, ខណៈពេលដែលសម្រាប់, ។ ល។ , អ្នកត្រូវបន្ថែមចន្លោះចំនួន 4 សម្រាប់និយមន័យដែលអ្នកចង់អនុវត្តតាមមុខងាររបស់អ្នក។ យើងនឹងចូលទៅក្នុងអ្វីដែលនីមួយៗមានន័យឆាប់។ពីថតគេហទំព័ររបស់យើងកែសម្រួលឯកសារមតិព័ត៌មាន / មើលឯកសារមើល .py ដោយប្រើ Nano និងបន្ថែមបន្ទាត់ខាងក្រោមទៅចុងបញ្ចប់នៃឯកសារ។
ពី Django.HTTP នាំចូល HTTPropse def ef defé (សំណើរ): ត្រឡប់ HTTPrepse ('សួស្តីពិភពលោក')HTTPrope របស់ Django ឆ្លើយតបនឹងខ្សែអត្ថបទដែលត្រូវបានតាងដោយការបើកនិងបិទ '។ រាល់ពេលដែលអ្នកឆ្លងកាត់ព័ត៌មានទៅមុខងារឬថ្នាក់ដូចជាការស្នើសុំឬខ្សែអ្នកត្រូវប្រើវង់ក្រចក (បើកនិងបិទ) ។
នេះមិនមែនជាអ្វីដែលយើងត្រូវការដើម្បីមើលទស្សនៈរបស់យើងនៅឡើយទេ។ ជាការពិតណាស់យើងមិនបានប្រាប់ Server ដែលជាកន្លែងដែលទិដ្ឋភាពពិតជាយើងនៅតែត្រូវកំណត់ផ្លូវដែលទិដ្ឋភាពគួរបង្ហាញ។ សូមចាប់ផ្តើមដោយកំណត់ផ្លូវមូលដ្ឋានក្នុងកម្មវិធី / urls.py, ហើយយើងនឹងចូលទៅក្នុង PATH របស់ក្រុមនៅពេលក្រោយ។python -m venv venv # នៅក្នុងកម្មវិធី / urlss.py បន្ថែមបន្ទាត់មួយបន្ទាប់ពីសេចក្តីថ្លែងការណ៍នាំចូលបន្ទាប់ពីការនាំចូលទស្សនៈដែលយើងទើបតែបានបង្កើត។
source venv/bin/activate # ពីទស្សនៈនាំចូលមតិព័ត៌មានជាមតិព័ត៌មាន
django-admin startproject mysite . # ឥឡូវសូមកំណត់លំនាំមើល។ លំនាំមើលមានសមាសធាតុបីសមាសធាតុដែលមានសមាសធាតុផ្លូវដែលមានទេសភាពមាននៅក្នុងម៉ាស៊ីនមេ (ផ្លូវ ULL ដែលងាយស្រួលក្នុងការប្រើគំរូដែលអាចត្រូវបានផ្លាស់ប្តូរប្រសិនបើចាំបាច់ក្នុងការធ្វើឱ្យមានទិដ្ឋភាពផ្សេងទៀតឬទទួលបានឈ្មោះឡូជីខល។ វាសមហេតុផលក្នុងការធ្វើអ្វីៗតាមវិធីនេះហើយអាចបត់បែនបានព្រោះក្រមសីលក្រេឌីតរបស់អ្នកនឹងក្លាយជាបរិយាកាសផ្លាស់ប្តូរដែលមិនធ្លាប់មានដែលត្រូវការភាពបត់បែននិងការច្នៃប្រឌិតដើម្បីឱ្យមានតម្លៃនិងងាយស្រួលធ្វើការជាមួយ។ នេះជាអ្វីដែលមើលរបស់អ្នកនឹងមើលទៅដូចអ្នកអាចបន្ថែមវាទៅ Urlpatterns = [ផ្នែកនៃកម្មវិធី / urls.py ។ លំនាំទិដ្ឋភាពត្រូវបានកំណត់ដោយសមាសធាតុទាំងបីដែលបានពិពណ៌នាខាងលើនិងមុខងារដែលគេហៅថាផ្លូវ។ លំនាំ URL របស់អ្នកគឺជាបញ្ជីដូច្នេះត្រូវប្រាកដថាតែងតែបញ្ចប់ធាតុនីមួយៗនៅក្នុងពួកគេដោយសញ្ញាក្បៀសព្រោះនេះបំបែកគ្នា។ ធាតុនីមួយៗគួរតែបន្តនៅលើបន្ទាត់ថ្មីមួយ, ម្តងទៀតជាមួយនឹងចន្លោះបួនមុនពេលវា, ដូចគ្នានឹងកម្មវិធីនៅក្នុង settings.py ។ យើងនឹងកំណត់ធាតុផ្សំដំបូងនៃទិដ្ឋភាពដោយមានមុខងារខ្សែអក្សរទទេក្នុងគោលបំណងដើម្បីបង្កើតទិដ្ឋភាពដែលដំណើរការលើថតឫសរបស់ម៉ាស៊ីនមេគេហទំព័រ។ url របស់អ្នកឥឡូវនេះគួរតែមើលទៅដូចនេះ:
ពីទស្សនៈនាំចូលមតិព័ត៌មានជាមតិព័ត៌មាន
urlpatterns = [
ផ្លូវ ('', feed_views.hello, ឈ្មោះ = 'សួស្តី'),
តមយយរសយលនេះគឺជាមូលដ្ឋានសម្រាប់បង្កើតគេហទំព័រជាមួយ Django ដែលមានស្ថេរភាពទាំងស្រុង។ ដើម្បីធ្វើឱ្យគេហទំព័រដែលមានភាពស្វាហាប់កាន់តែច្រើនដែលយើងអាចចាប់ផ្តើមឃ្លាំងសម្ងាត់ព័ត៌មានដូចជារូបភាពវីដេអូអូឌីយ៉ូនិងច្រើនទៀតយើងនឹងត្រូវការប្រើម៉ូដែលដែលយើងនឹងរុករកបន្ទាប់។ សម្រាប់ពេលនេះតោះពិនិត្យមើលលេខកូដរបស់យើងហើយដំណើរការម៉ាស៊ីនមេ។ ដើម្បីពិនិត្យមើលលេខកូដសម្រាប់កំហុសដំណើរការ:
ការត្រួតពិនិត្យ Manhon Manage.pypython manage.py startapp feed
ប្រសិនបើមានសារកំហុសណាមួយអ្នកគួរតែពិនិត្យឡើងវិញនូវការផ្លាស់ប្តូរដែលអ្នកបានធ្វើចំពោះកម្មវិធីរបស់អ្នកហើយមើលថាតើមានអ្វីដែលត្រូវជួសជុលដូចជាកន្លែងទំនេរតួអក្សរបន្ថែមណាមួយដែលមានតួអក្សរដែលបានលុបដោយចៃដន្យឬអ្វីផ្សេងទៀត។ អានតាមរយៈសារកំហុស (ប្រសិនបើអ្នកមាន) អ្នកគួរតែអាចមើលឃើញផ្លូវទៅកាន់ឯកសារដែលអ្នកបានបង្កើតឬកែសម្រួលរួមជាមួយលេខបន្ទាត់ដូច្នេះមើលទៅក្នុងឯកសារនោះហើយមើលថាតើអ្នកអាចជួសជុលអ្វីដែលនៅទីនោះបានដែរឬទេ។ ប្រសិនបើអ្នកបានដោះស្រាយបញ្ហាសូមដំណើរការពាក្យបញ្ជាខាងលើម្តងទៀត។ នៅពេលសូហ្វវែររបស់អ្នករួចរាល់ក្នុងការដំណើរការហើយកំពុងដំណើរការអ្នកនឹងឃើញប្រព័ន្ធលទ្ធផល "មិនមានបញ្ហាទេ" ។ ឥឡូវអ្នកបានត្រៀមខ្លួនរួចរាល់ហើយ។ ដំណើរការម៉ាស៊ីនមេដោយមានៈRunThon គ្រប់គ្រងកម្មវិធីគ្រប់គ្រង 0.0.0.0.0:8000
ឥឡូវបើកកម្មវិធីអ៊ីនធឺណិតហើយរុករកទៅ http: // localhost: 8000 ។ អ្នកគួរតែមើលអត្ថបទដែលបានត្រឡប់មកវិញនៅក្នុងវង់ក្រចកនិងសម្រង់នៃមុខងារ HTTPRESPONSE ក្នុងទិដ្ឋភាពរបស់អ្នក។ នេះគ្រាន់តែជាឧទាហរណ៍មូលដ្ឋានប៉ុណ្ណោះប៉ុន្តែប្រសិនបើអ្នកធ្វើវារហូតមកដល់ពេលនេះអ្នកយល់ពីមូលដ្ឋានគ្រឹះនៃរបៀបលីនុច, បក្សពួក Python និង Django ធ្វើការ។ តោះជីកឱ្យស៊ីជម្រៅចូលទៅក្នុងគំរូនៃមូលដ្ឋានទិន្នន័យមួយចំនួនហើយស្វែងយល់ពីអំណាចរបស់វណ្ណៈ Python ក្នុងការរក្សាទុកព័ត៌មាន។ បន្ទាប់មកយើងនឹងចាប់ផ្តើមក្តាប់ HTML និង CSS មុនពេលដែលយើងធ្វើឱ្យគេហទំព័ររបស់យើងមានលក្ខណៈពិសេសពេញលេញបត់បែននិងសុវត្ថិភាពដោយប្រើ JavaScript និងការរៀនម៉ាស៊ីន។nano app/settings.py
ថ្នាក់ត្រូវបានរក្សាទុកនៅក្នុង Models.py នៃកម្មវិធីរបស់អ្នក។ ការប្រើប្រាស់ណាណូ, កែសម្រួលកម្មវិធី / ម៉ូឌែលនិងបន្ថែមថ្នាក់ថ្មី។ ថ្នាក់មួយត្រូវបានកំណត់ជាមួយនឹងនិយមន័យថ្នាក់ហើយត្រូវបានអនុម័ត superclass ដែលវាទទួលបានពី, ក្នុងករណីនេះ models.model ។ ឈ្មោះរបស់ថ្នាក់នេះកើតឡើងបន្ទាប់ពីនិយមន័យថ្នាក់ហើយបន្ទាប់ពីនិយមន័យថ្នាក់ a: (ពោះវៀនធំ) ត្រូវបានប្រើមុនពេលដែលគុណលក្ខណៈនិងនិយមន័យមុខងារចងភ្ជាប់ទៅនឹងថ្នាក់ត្រូវបានបង្ហាញខាងក្រោម។ ថ្នាក់របស់យើងត្រូវការលេខសម្គាល់ដែលយើងអាចប្រើដើម្បីប្រើវាហើយរក្សាវាឱ្យមានលក្ខណៈប្លែកហើយវាក៏ត្រូវការវាលអត្ថបទដើម្បីរក្សាទុកព័ត៌មានមួយចំនួនផងដែរ។ ក្រោយមកទៀតយើងអាចបន្ថែមត្រាពេលវេលាប៊ូលីន (និយមន័យពិតឬមិនពិតដែលអាចធ្វើការសម្រេចចិត្តអំពីអ្វីដែលត្រូវធ្វើជាមួយគំរូហើយអាចត្រូវបានប្រើដើម្បីតម្រៀបម៉ូដែលឱ្យអ្នកប្រើបានចូលទៅក្នុងម៉ាស៊ីនមេនិងច្រើនទៀត។ តោះស្រាយកូដខាងក្រោម:ពីម៉ូឌែល Django.dB ចូល # ការនាំចូលដែលត្រូវបានប្រើដើម្បីកំណត់ថ្នាក់របស់យើងហើយវាជាគុណលក្ខណៈ ប៉ុស្តិ៍ថ្នាក់ (ម៉ូឌែល។ អ្នកតំណាង): # និយមន័យនៃថ្នាក់របស់យើងផ្ទាល់ លេខសម្គាល់ = models.autofield (Maine_key = TRUE) # អត្តសញ្ញាណប័ណ្ណរបស់យើងដែលជាកូនសោដែលបានបង្កើតរបស់យើងដែលនឹងអនុញ្ញាតឱ្យយើងសួរគំរូរក្សាវាឱ្យមានលក្ខណៈប្លែកហើយវាមានប្រយោជន៍នៅពេលវាត្រូវបានបង្កើតឡើង។ អត្ថបទ = modext.text.text (លំនាំដើម = '') # គុណលក្ខណៈហាងរបស់យើងនៅក្នុងករណីនេះអត្ថបទនេះអត្ថបទខ្លះលំនាំដើមទៅខ្សែអក្សរទទេ។
ការនាំចូលដែលត្រូវបានប្រើដើម្បីកំណត់ថ្នាក់របស់យើងហើយវាជាគុណលក្ខណៈរបស់យើងINSTALLED_APPS = [
'feed',
]
និយមន័យនៃថ្នាក់របស់យើងផ្ទាល់លេខសម្គាល់នៃគំរូរបស់យើងដែលជាកូនសោដែលបានបង្កើតដោយស្វ័យប្រវត្តដែលនឹងអនុញ្ញាតឱ្យយើងសួរគំរូសូមរក្សាវាឱ្យមានលក្ខណៈប្លែកហើយមានប្រយោជន៍នៅពេលដែលយើងត្រូវប្រាស្រ័យទាក់ទងជាមួយគំរូនៅពេលវាត្រូវបានបង្កើតឡើង។
គុណលក្ខណៈហាងបុរាណរបស់យើងក្នុងករណីនេះអត្ថបទខ្លះលំនាំដើមទៅខ្សែអក្សរទទេ។បិទនិងរក្សាទុកឯកសារដូចដែលយើងបានធ្វើមុនពេលបញ្ចប់។
មានវាលនិងជំរើសជាច្រើនទៀតដែលយើងនឹងស្វែងរកនៅពេលយើងធ្វើបច្ចុប្បន្នភាពថ្នាក់នេះនៅពេលដែលកម្មវិធីរបស់យើងវិវត្តប៉ុន្តែនេះគឺជាតម្រូវការចាំបាច់នៃការបង្កើតកម្មវិធីដើម្បីប្រកាសអត្ថបទមួយចំនួន។ ទោះជាយ៉ាងណាក៏ដោយម៉ូដែលនេះនឹងមិនដំណើរការតែម្នាក់ឯងទេ។ ដូចដែលបានពិពណ៌នាពីមុនយើងនឹងត្រូវការទិដ្ឋភាពផ្ទាល់ខ្លួននិងលំនាំ URL ផ្ទាល់ខ្លួនដើម្បីធ្វើឱ្យម៉ូដែលនេះដំណើរការហើយយើងក៏នឹងត្រូវការសំណុំបែបបទរួមជាមួយគំរូផងដែរ។ តោះស្វែងយល់ពីទម្រង់បែបបទដំបូង។ដើម្បីកំណត់ទម្រង់, កែសម្រួលកម្មវិធី / forms.py ជាមួយ Nano និងបន្ថែមបន្ទាត់ដូចខាងក្រោម។ យើងនឹងត្រូវការការនាំចូលពីរថ្នាក់របស់យើងក៏ដូចជាគំរូដែលយើងបានបង្កើត (Feed.Models) ដែលជានិយមន័យស្រដៀងនឹងម៉ូដែលនិងវាលមួយរួមជាមួយអនុរកសមាគម Meta ដែលនឹងមានលក្ខណៈប្រតិកម្មជាមួយ។ សំណុំបែបបទនេះក៏អាចមានមុខងារចាប់ផ្តើមដែលកំណត់ដោយផ្អែកលើព័ត៌មានតាមការស្នើសុំគំរូឬផ្សេងទៀតយើងនឹងស្វែងយល់នៅពេលក្រោយ។
ទម្រង់គំរូគឺមានប្រយោជន៍ខ្លាំងណាស់ព្រោះវាអាចបង្កើតគំរូឬកែសម្រួលគំរូមួយដូច្នេះយើងនឹងប្រើវាសម្រាប់ទាំងពីរ។ សូមកំណត់មួយនៅក្នុង Forms.py ខាងក្រោម។ពីទម្រង់ការនាំចូល Django ពី Feed.Models ភ្នំពេញប៉ុស្តិ៍នាំចូល ប្រភេទប្រៃសណីយ៍ (Forms.Modelform): អត្ថបទ = Forms.Charfield (ធាតុក្រាហ្វិក = ទម្រង់ .textarea) មេតាថ្នាក់: គំរូ = ភ្នំពេញប៉ុស្តិ៍ វាល = ('អត្ថបទ',,)
នេះគឺជាមូលដ្ឋានគ្រឹះនៃទម្រង់និងម៉ូដែលមើលទៅដូច។ សំណុំបែបបទគំរូនេះអាចត្រូវបានប្រើដើម្បីធ្វើឱ្យទាន់សម័យឬកែសម្រួលប្រកាសមួយ, ការផ្លាស់ប្តូរអត្ថបទដែលវាមាន។ យើងនឹងពិនិត្យមើលការបញ្ចូលទម្រង់បែបបទនេះទៅក្នុងទិដ្ឋភាពបន្ទាប់។ ដំបូងយើងធ្វើឱ្យការធ្វើចំណាកស្រុកនិងផ្លាស់ប្តូរមូលដ្ឋានទិន្នន័យដូច្នេះលេខកូដរបស់យើងអាចធ្វើអន្តរកម្មជាមួយគំរូនៅពេលវាដំណើរការ។ ដើម្បីធ្វើដូចនេះដំណើរការពាក្យបញ្ជាដូចខាងក្រោមៈPython Managor..pomationation គ្រប់គ្រង Python គ្រប់គ្រងការធ្វើចំណាកស្រុក
វានឹងចំណាយពេលមួយនាទីដើម្បីប្រតិបត្តិប៉ុន្តែនៅពេលដែលវាធ្វើវានឹងអនុញ្ញាតឱ្យអ្នកចូលប្រើគំរូនៅក្នុងទិដ្ឋភាពកណ្តាលឬកន្លែងផ្សេងទៀតនៅក្នុងកម្មវិធី។ សូមបន្តដោយធ្វើឱ្យមានទស្សនៈនៅកន្លែងដែលយើងអាចមើលឃើញគំរូរបស់យើង។ កែសម្រួលមតិព័ត៌មាន / Views.py និងបន្ថែមលេខកូដខាងក្រោមដូចដែលបានកត់សម្គាល់។ អ្នកមិនចាំបាច់បន្ថែមអ្វីទាំងអស់បន្ទាប់ពីសញ្ញា # លេខកូដនោះគឺជាយោបល់ដែលត្រូវបានប្រើដើម្បីបង្ហាញព័ត៌មានអំពីក្រម។ យើងនឹងចាប់ផ្តើមដោយការនាំចូលម៉ូដែលរបស់យើងនៅក្នុងទស្សនៈហើយបន្ថែមវាទៅបរិបទដែលយើងអាចបង្ហាញវានៅក្នុងគំរូដែលជាបញ្ជីសម្រាប់ការបង្ហាញ។ បន្ទាប់យើងនឹងបន្ថែមគំរូមួយដែលយើងអាចបង្ហាញទម្រង់និងម៉ូដែលដោយប្រើប៊ូតុងដើម្បីបង្កើតវត្ថុថ្មីដោយផ្អែកលើគំរូហើយដាក់វាទៅម៉ាស៊ីនមេ។ ស្តាប់មើលទៅពិតជាស្មុគស្មាញដូច្នេះសូមឱ្យវាបោះជំហានទៅមុខមួយជំហានម្តង ៗ ។ មុនពេលយើងបញ្ចប់ទិដ្ឋភាពសូមបង្កើតគំរូដែលគ្រាន់តែផ្តល់គំរូហើយធ្វើឱ្យប្រាកដថាយើងអាចមើលឃើញវាដោយបង្កើតប្រកាសថ្មីនៅក្នុងសែល។ នេះជារបៀបដែលទស្សនៈនោះគួរតែមើល:ពី Feed.Models ភ្នំពេញប៉ុស្តិ៍នាំចូល ពី Django.shortcuts ការនាំចេញរបស់ការនាំចូល, ប្តូរទិស ពី Django.urls ទំនិញនាំចូល មតិព័ត៌មាន Def (សំណើរ): POSTS = POST.Objects.All () # សួររាល់ប្រកាសទាំងអស់នៅក្នុងឃ្លាំងទិន្នន័យរហូតមកដល់ពេលនេះ ការត្រឡប់មកវិញបង្ហាញ (សំណើ, 'ចំណី / Feed.html', { 'ប្រកាស': ប្រកាស, })
សួររាល់ប្រកាសនៅក្នុងឃ្លាំងទិន្នន័យរហូតមកដល់ពេលនេះនេះមើលទៅសាមញ្ញណាស់រហូតដល់យើងទៅដល់បាត។ បង្ហាញ, តម្លៃដែលបានត្រឡប់ដោយមុខងារជំនួសឱ្យការឆ្លើយតបរបស់ HTTP ដូចគ្នានឹងការបញ្ចូលដំបូងដែលជាការបញ្ចូលដំបូងរបស់វាទទួលយកបរិបទ (ក្នុងករណីនេះអាចត្រូវបានបង្ហាញនៅក្នុងគំរូដែលបានកំណត់នៅក្នុងមុខងារ។ គំរូនេះនឹងក្លាយជាឯកសារ HTML ដែលមានភាសាមួយដែលមានឈ្មោះថាជិនជេ 2 ដែលផ្តល់ព័ត៌មាន Python ទៅក្នុង HTML ។
ដើម្បីចាប់ផ្តើមបង្កើតគំរូធ្វើឱ្យថតពីរនៅក្នុងចំណី។mkdir ចំណី / ពុម្ព mkdir ចំណី / ពុម្ព / មតិព័ត៌មាន
បន្ទាប់កែសម្រួលគំរូមួយនៅក្នុងថតខាងលើមតិព័ត៌មាន / ទំព័រគំរូ / ចំណីនិងបន្ថែមកូដសម្រាប់ឧទាហរណ៍នេះ។ សូមក្រឡេកមើលគំរូសម្រាប់ឧទាហរណ៍នេះ។ការចិហ្ចឹម {% សម្រាប់ប្រកាសក្នុងប្រកាស%} {{Post.text}}}}} {{Post.text}}}}} {{Post.text}}}}} {{Post.text}}}}} {% endfor%}
នេះគឺជាគំរូសាមញ្ញណាស់។ វាកំណត់ការបើកនិងបិទស្លាក HTML ស្លាកប្រភេទឯកសារដែលជាចំណងជើងតួដែលមានចំណងជើងរឿងព្រេងដែលបន្ថែមបន្ទាត់តូចមួយកាត់អេក្រង់និងសម្រាប់រង្វិលជុំដែលបានប្រកាសជាកថាខណ្ឌនៅក្នុងទំព័រគំរូ។ នេះគឺជាអ្វីដែលត្រូវការដើម្បីបង្ហាញប៉ុន្តែមិនមាននៅក្នុងមូលដ្ឋានទិន្នន័យនៅឡើយទេ។ តោះបង្កើតខ្លះជាមួយសែល។ យើងអាចដំណើរការសែលជាមួយនឹងការគ្រប់គ្រង .pyពស់ថ្លាន់ម៉ាយធីង
ឥឡូវសូមនាំចូលគំរូភ្នំពេញប៉ុស្តិ៍របស់យើងពី Feed.Models ភ្នំពេញប៉ុស្តិ៍នាំចូល
បន្ទាប់យើងនឹងបង្កើតប្រកាសដ៏សាមញ្ញមួយដែលមានខ្សែអក្សរហើយចេញពីសែល។ ខ្សែអក្សរអាចជាអ្វីដែលវែងឆ្ងាយវាមានសុពលភាពអត្ថបទ។Post.objects.create (អត្ថបទ = 'សួស្តីពិភពលោក') ចេញ ()
ចុងក្រោយយើងនឹងត្រូវបន្ថែមលំនាំ URL ទៅចំណីរបស់យើង។ ដោយសារតែកម្មវិធីមតិព័ត៌មានរបស់យើងនឹងប្រើ URLs ជាច្រើនហើយយើងចង់រក្សាទុកទំហំឯកសារតូចសូមបង្កើត URLS.S.S.S.S.S.S.SHTY ក្នុងកម្មវិធីផ្តល់ចំណីរបស់យើងដែលមើលទៅដូចនេះ:ពីផ្លូវនាំចូល Django.urls ពី។ ការធ្វើទំនើបកម្មការមើល urlpatterns = [ ផ្លូវ ('', views.feed, ឈ្មោះ = 'ចំណី'), តមយយរសយល
យើងក៏ត្រូវការកែសម្រួល UrlSS.py នៅក្នុងកម្មវិធីមូលដ្ឋានអ្វីក៏ដោយដែលយើងបានសំរេចចិត្តហៅវានេះគឺជាថតដំបូងដែលយើងបានបង្កើត។ កែសម្រួលកម្មវិធី / App.py ហើយបន្ថែមចំណុចខាងក្រោមទៅលំនាំ URLពីការនាំចូល Django.urls រួមមានលេខ # នៅខាងលើ urlpatterns = [ # ... លេខកូដមុននៅទីនេះ ផ្លូវ ('មតិព័ត៌មាន /' រួមបញ្ចូល (('Feed.urls'), Namespace = 'ចំណី'), តមយយរសយល
នៅខាងលើ... លេខកូដមុននៅទីនេះ
ឥឡូវនេះនៅពេលដែលយើងដំណើរការម៉ាស៊ីនមេដែលមាន runtyon គ្រប់គ្រងកម្មវិធីនេះយើងនឹងឃើញទំព័រដែលយើងបានបង្កើតពីព្រោះយើងមានគំរូទិដ្ឋភាពទិដ្ឋភាពនិងគំរូក៏ដូចជាលំនាំ URL រួមជាមួយធាតុនៅក្នុងឃ្លាំងទិន្នន័យ។ បន្ទាប់មកទៀតតោះអនុវត្តសំណុំបែបបទដែលយើងបានបង្កើតហើយចាប់ផ្តើមបង្កើតប្រកាសផ្ទាល់ខ្លួនរបស់យើង។ ប៉ុន្តែមុនពេលដែលយើងសរសេរកូដច្រើនពេកសូមធ្វើការបម្រុងទុកដោយប្រើស្គ្រីបដែលយើងបានសរសេរមុននេះការបម្រុងទុក។ ដំណើរការស្គ្រីបនេះនៅក្នុងសែលសូមរង់ចាំមួយភ្លែតហើយកូដទាំងអស់នឹងត្រូវបានបម្រុងទុកសម្រាប់ឃ្លាំង GIT របស់យើង។បបបមហ្ចប់
ការអនុវត្តសំណុំបែបបទគឺសាមញ្ញណាស់។ យើងនឹងនាំចូលទម្រង់របស់យើងបន្ថែមអ្នកស្នើសុំការស្នើសុំក្រោយទៅមើលហើយរក្សាទុកប្រកាសនៅក្នុងឃ្លាំងទិន្នន័យមុនពេលបញ្ជូនបន្តទៅទិដ្ឋភាពដូចគ្នា។ យើងអាចប្រើមុខងារប្តូរទិសដែលយើងបាននាំចូលរួចហើយហើយមុខងារផ្សេងទៀតដែលមានឈ្មោះថាបញ្ច្រាសដើម្បីទទួលបាន URL សម្រាប់លំនាំមើល។ យើងនឹងសាកសួរចំណុចនេះជាមួយនឹងចំណីរបស់ខ្សែអក្សរ: មតិព័ត៌មាន 'ពីព្រោះចន្លោះចន្លោះប្រហោងនៃគំរូដែលបានបញ្ចូលគឺមតិព័ត៌មានហើយទិដ្ឋភាពក៏មានឈ្មោះផងដែរ។ពី Feed.Forms នាំចូលទម្រង់ប្រូបាបិន មតិព័ត៌មាន Def (សំណើរ): POSTS = POST.Objects.All () # សួររាល់ប្រកាសទាំងអស់នៅក្នុងឃ្លាំងទិន្នន័យរហូតមកដល់ពេលនេះ ប្រសិនបើការស្នើសុំ .method == 'ប្រកាស': # ដោះស្រាយការស្នើសុំប្រកាស ទម្រង់ = ប្រៃសណីយ៍ (remonS.post) # បង្កើតឧទាហរណ៍នៃទម្រង់និងរក្សាទុកទិន្នន័យទៅវា ប្រសិនបើ Form.is_valid (no # មានសុពលភាព Form.Save () # រក្សាទុកវត្ថុថ្មី ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('ចំណី: Feed')) # បញ្ជូនបន្តទៅ URL តែមួយជាមួយនឹងសំណើរទទួលបាន ការត្រឡប់មកវិញបង្ហាញ (សំណើ, 'ចំណី / Feed.html', { 'ទម្រង់បែបបទ': ប្រៃសណីយ៍ () # ត្រូវប្រាកដថាឆ្លងកាត់ទម្រង់បែបបទទៅក្នុងបរិបទដូច្នេះយើងអាចបង្ហាញវាបាន។ 'ប្រកាស': ប្រកាស, })
សួររាល់ប្រកាសនៅក្នុងឃ្លាំងទិន្នន័យរហូតមកដល់ពេលនេះដោះស្រាយការស្នើសុំក្រោយ
បង្កើតឧទាហរណ៍នៃទម្រង់និងរក្សាទុកទិន្នន័យទៅវាធ្វើឱ្យទម្រង់មានសុពលភាព
រក្សាទុកវត្ថុថ្មីបញ្ជូនបន្តទៅ URL ដូចគ្នាជាមួយនឹងសំណើទទួលបាន
ត្រូវប្រាកដថាបានឆ្លងកាត់សំណុំបែបបទទៅក្នុងបរិបទដូច្នេះយើងអាចបង្ហាញវាបាន។ដាក់ស្លាកជា HTML ហើយបង្ហាញសំណុំបែបបទក្នុងទំព័រគំរូ HTML ដែលមានប៊ូតុងបញ្ជូន។ យើងក៏ត្រូវការនិមិត្តសញ្ញា CSRF ផងដែរដែលជានិមិត្តសញ្ញាដែលការពារគេហទំព័រខាងក្រៅពីការបញ្ចូលទៅទម្រង់ដោយមិនចាំបាច់ផ្ទុកទំព័រដំបូង។
ការចិហ្ចឹម {% csrf_token%} {{ទម្រង់}} ភ្នំពេញប៉ុស្តិ៍ថ្មី {% សម្រាប់ប្រកាសក្នុងប្រកាស%} {{Post.text}}}}} {{Post.text}}}}} {{Post.text}}}}} {{Post.text}}}}} {% endfor%}from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
សូមបំបែកនេះ។ មានថ្នាក់ទម្រង់ថ្មីមួយថូខឹនទម្រង់បែបបទខ្លួនវាផ្ទាល់និងប៊ូតុងដាក់ស្នើ។ សាមញ្ញណាស់ប៉ុន្តែនៅពេលដែលយើងក្រឡេកមើលវាយើងប្រហែលជាចង់ធ្វើឱ្យវាមើលទៅស្អាតជាងនេះ។ វាដំណើរការយើងអាចប្រកាសប្រកាសថ្មីដោយប្រើសំណុំបែបបទហើយឥឡូវនេះពួកគេត្រូវបានរក្សាទុកនៅក្នុងឃ្លាំងទិន្នន័យ។ មានរឿងមួយចំនួនដែលកំពុងកើតឡើងនៅទីនេះ។ យើងប្រើស្លាក HTML ដើម្បីប្រកាសថាឯកសារនេះគឺជាឯកសារ HTML យើងប្រើស្លាកគំរូមួយ ({% {{%%}) ដើម្បីបង្ហាញនិមិត្តសញ្ញាសម្រាប់សំណុំបែបបទនិងមួយផ្សេងទៀត {}} ដើម្បីបង្ហាញទម្រង់បែបបទ។ យើងក៏មានរង្វិលជុំដើម្បីបង្ហាញអត្ថបទដោយប្រើស្លាកប្លុកនិងស្លាកគំរូ។ ស្លាកប្លុកពិតជាមានសារៈសំខាន់ណាស់ព្រោះយើងអាចកំណត់ថាតើផ្នែកនៃគំរូត្រូវបានបង្ហាញជាមួយពួកគេហើយស្លាកគំរូគឺជាមូលដ្ឋាននៃរបៀបដែលយើងដាក់អថេរចូលក្នុងក្រមរបស់យើង។ឥឡូវនេះយើងត្រូវធ្វើឱ្យកម្មវិធីរបស់យើងមើលទៅល្អប្រសើរព្រោះឥឡូវនេះវាមើលទៅពិតជាមូលដ្ឋាន។ យើងអាចធ្វើដូច្នេះបានដោយប្រើ CSS ទាំងក្នុងតួឬនៅក្នុងថ្នាក់ចងភ្ជាប់ទៅនឹងវត្ថុនីមួយៗនៅក្នុងឯកសារ។ CSS ពិតជាល្អណាស់ព្រោះវាប្រាប់អ្វីៗគ្រប់យ៉ាងនៅលើទំព័ររបៀបដែលវាគួរតែមើលហើយអាចធ្វើឱ្យវាមើលទៅពិតជាល្អ។ មានបណ្ណាល័យមួយចំនួនដែលអាចធ្វើបានប៉ុន្តែផ្ទាល់ខ្លួនរបស់ខ្ញុំគឺទៅគឺស្បែកជើងកវែង។
getbootstrap..com/ធ្វើឱ្យថតថ្មីមួយហៅថាគំរូដែលមានពុម្ព MKDir ហើយបន្ទាប់មកកែសម្រួលពុម្ព / bass.html ។
វាគួរតែមើលទៅដូចនេះ:{% តួ%}%} {% endblock%}
ត្រូវប្រាកដថាបានចម្លង CSS និង JavaScript ឯកសារ .css និង .js ពីព្រោះយើងនឹងត្រូវការ Javascript ដើម្បីធ្វើឱ្យគេហទំព័ររបស់យើងមានមុខងារកាន់តែច្រើននាពេលអនាគត។from feed import views as feed_views
ឥឡូវសូមត្រលប់ទៅសំបកសេះហើយដំណើរការពាក្យបញ្ជារហ័ស។ សូមចាំថាប្រសិនបើអ្នកត្រូវការដើម្បីចូលទៅកាន់បរិស្ថានជាក់ស្តែងប្រភេទប្រភព venv / bin / Active ។ នេះនឹងអនុញ្ញាតឱ្យអ្នកតំឡើងកញ្ចប់ Python ក្នុងស្រុកក្នុងវិធីមួយដែលអនុញ្ញាតឱ្យ Django ចូលប្រើវា។ ដើម្បីផ្តល់ឱ្យទម្រង់របស់យើងដែលបង្កើតដោយវណ្ណៈ Django Bootstrap យើងនឹងប្រើកញ្ចប់ Python ដែលគេហៅថាទម្រង់បែបក្រហាយ។ យើងអាចទាញយករឿងនេះដោយប្រើពាក្យបញ្ជាខាងក្រោមPIP តំឡើង Django-Cruispy- ទម្រង់
នៅពេលដែលវាត្រូវបានតំឡើងបន្ថែមវាទៅការកំណត់ .pyfrom feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
busted_Apps = [
# ... លេខកូដមុននៅទីនេះ
'crispy_forms',
តមយយរសយល... លេខកូដមុននៅទីនេះ
ឥឡូវត្រលប់មកទំព័រគំរូមតិព័ត៌មានរបស់យើងយើងអាចដករបស់ខ្លះបាន។ តោះលុបការចាប់ផ្តើមនិងចុងបញ្ចប់នៃឯកសារហើយជំនួសវាដោយទទួលមរតកពីគំរូមូលដ្ឋានរបស់យើងដោយប្រើពង្រីកនិងនិយមន័យប្លុក។ យើងក៏នឹងបន្ថែមការនាំចូលតម្រងគំរូដែលមានផ្ទុកនិងតម្រងគំរូទៅក្នុងទម្រង់។ ចុងក្រោយ, តោះបន្ថែមថ្នាក់ Bootstrap ទៅប៊ូតុងនៅលើសំណុំបែបបទដើម្បីធ្វើឱ្យវាមើលទៅហាក់ដូចជាប៊ូតុងមួយ។ ដែលគួរតែមើលទៅដូចនេះ:python manage.py check
{% ពង្រីក 'basic.html'%}
{% តួ%}%}
{% ផ្ទុក crispy_forms_tags%}
{% csrf_token%}
{{Form | Crispy}}
ភ្នំពេញប៉ុស្តិ៍ថ្មី
{% សម្រាប់ប្រកាសក្នុងប្រកាស%}
{{Post.text}}}}} {{Post.text}}}}} {{Post.text}}}}} {{Post.text}}}}}
{% endfor%}
{% endblock%}ស្រស់ស្អាត! នោះហើយជាកូដបន្តិចហើយ។ បន្ទាប់មកទៀតយើងគួរតែសាកល្បងវាហើយធ្វើឱ្យប្រាកដថាយើងអាចឃើញថាអ្វីៗមើលទៅស្រស់ស្អាតហើយក៏ប្រាកដថាអ្វីៗដំណើរការបានត្រឹមត្រូវដែរ។ ដំណើរការម៉ាស៊ីនបម្រើតាមការណែនាំមុន ៗ ហើយត្រូវប្រាកដថាទីតាំងមើលនិងដំណើរការល្អ។ ការងារដ៏អស្ចារ្យ! អ្នកបានត្រៀមខ្លួនរួចរាល់ហើយក្នុងការឈានទៅជំហានបន្ទាប់ដែលយើងនឹងបន្ថែមមុខងារចូលរបស់អ្នកប្រើដោយប្រើ URLs ស្រដៀងគ្នា, ទស្សនៈនិងគំរូស្រដៀងគ្នា។ គំរូគោលគឺមានសារៈសំខាន់ហើយយើងនឹងបន្តកែប្រែវាហើយធ្វើឱ្យមានការផ្លាស់ប្តូរប៉ុន្តែឥឡូវនេះសូមផ្តោតលើការធ្វើឱ្យអ្នកប្រើប្រាស់ចូលដោយប្រើកម្មវិធីរបស់អ្នកឱ្យមានសុវត្ថិភាពតែប៉ុណ្ណោះដោយអ្នក។
ដើម្បីធ្វើដូចនេះយើងចាំបាច់ត្រូវប្រើម៉ូឌែលអ្នកប្រើប្រាស់ដែលបានបង្កើតឡើងទៅ Django ។ ម៉ូដែលអ្នកប្រើប្រាស់គឺជាគំរូមូលដ្ឋានទិន្នន័យដូចជាការចុះផ្សាយរបស់យើងដែលអាចត្រូវបានបង្ហាញដើម្បីកំណត់អ្នកប្រើចូលក្នុងគេហទំព័រ។ នៅពេលអនាគតមុនពេលដែលយើងដាក់ពង្រាយទីតាំងនោះទៅអ៊ីនធឺណិតយើងនឹងពង្រីកគំរូនេះជាមួយម៉ូដែលផ្សេងទៀតដែលបានចាត់ទុកថាជាគំរូរបស់វាហើយបង្កើតវិធានការសុវត្ថិភាពបន្ថែមសម្រាប់ការចូលដែលមានភាពធន់នឹងការឆបោក។ យើងនឹងចាប់ផ្តើមដោយប្រើឯកសារដែលបានបង្កើតឡើងនៅក្នុងទម្រង់ចូលដែល Django ផ្តល់ជូន។ ដំបូងចូរយើងបង្កើតកម្មវិធីថ្មីមួយដែលយើងនឹងប្រើដើម្បីបង្ហាញគំរូនិងទស្សនៈសម្រាប់ទំព័រចូលមូលដ្ឋាន។ យើងក៏នឹងបង្កើតកម្មវិធីផ្សេងទៀតដើម្បីតំណាងឱ្យការបន្តនូវបញ្ហាប្រឈមនៃការបន្តដើម្បីទទួលបានកម្មវិធីនេះរួមទាំង Pincode, ការទទួលស្គាល់មុខផ្ទៃមុខនៅជិតវាលទំនាក់ទំនងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវនៃកត្តាខាងក្រៅនិងការទទួលស្គាល់ស្នាមក្រមដៃ។python manage.py runserver 0.0.0.0:8000
យើងបាននិយាយរួចហើយអំពីការចាប់ផ្តើមកម្មវិធីមួយ។ ពីថតរបស់យើងនៅខាងក្នុងបរិស្ថានជាក់ស្តែងឆ្លងកាត់ការគ្រប់គ្រងការជជែកវែកញែកទាំងនេះអ្នកប្រើប្រាស់ Mython Managica.py អ្នកប្រើប្រាស់
ឥឡូវនេះយើងគួរតែមានថតឯកសារសម្រាប់កម្មវិធីថ្មី។ សូមចាប់ផ្តើមដោយការបង្កើតទិដ្ឋភាពនៅក្នុងថតនោះដែលត្រូវនឹងការចូលរបស់អ្នកប្រើ។ Django បានបង្កើតឡើងនៅក្នុងទស្សនៈសម្រាប់ការចូលអ្នកប្រើប្រាស់ប៉ុន្តែទាំងនេះនឹងមិនសមស្របសម្រាប់យើងទេពីព្រោះយើងត្រូវការទស្សនៈផ្ទាល់ខ្លួនដែលបានធ្វើរួចដែលបានធ្វើរួចជាមួយនឹងនិយមន័យ។នៅក្នុងទិដ្ឋភាពនេះយើងនឹងចាប់ផ្តើមដោយពិនិត្យមើលសំណើក្រោយការស្នើសុំការស្នើសុំចូល។
នៅក្នុងអ្នកប្រើប្រាស់ / មើល .py បន្ថែមលេខកូដខាងក្រោមfrom django.db import models # ពី Django.shortcuts ការនាំចេញរបស់ការនាំចូល, ប្តូរទិស
ពី Django.urls ទំនិញនាំចូល
ពី Django.contrib.auth.Forms នាំចូលការផ្ទៀងផ្ទាត់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ, protpasswordford formation
ពី Django.contrib.auth នាំចូលផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ
ពី Django.contrib.auth នាំចូលចូល Auth_login
ពី Django.Contrib នាំចូលសារនាំចូល
Def ចូល (ការស្នើសុំ):
ប្រសិនបើសំណើ .method == "ប្រកាស":
ឈ្មោះអ្នកប្រើ = ense.post ['ឈ្មោះអ្នកប្រើ] # ទទួលបានឈ្មោះអ្នកប្រើនិងពាក្យសម្ងាត់ពីសំណើក្រោយ
លេខសម្ងាត់ = opengest ['password'] # ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវអ្នកប្រើ
អ្នកប្រើ = ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ (ឈ្មោះអ្នកប្រើ = ឈ្មោះអ្នកប្រើពាក្យសម្ងាត់ = ពាក្យសម្ងាត់)
ប្រសិនបើអ្នកប្រើប្រាស់:
Auth_login (សំណើ, អ្នកប្រើ backend = 'django.contrib.auth.Authense.modelbends')
សារ .scess (សំណើរសុំ 'ពាក្យសម្ងាត់របស់អ្នកត្រូវបានទទួលយក។ សូមបន្ត')
ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('ចំណី: ចំណី'))
ផ្សេងទៀត: សារ .warning (សំណើរឈ្មោះអ្នកប្រើឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។ សូមព្យាយាមម្តងទៀត ')
ត្រឡប់ការផ្តល់ជូនវិញ (សំណើរ 'អ្នកប្រើប្រាស់ / login.html', {'ទម្រង់បែបបទ': ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ()})
class Post(models.Model): # ទទួលបានឈ្មោះអ្នកប្រើនិងពាក្យសម្ងាត់ពីសំណើក្រោយ
id = models.AutoField(primary_key=True) # ផ្ទៀងផ្ទាត់អ្នកប្រើប្រាស់
text = models.TextField(default='') # នេះគឺជាអ្វីដែលអ្នកត្រូវការសម្រាប់ទិដ្ឋភាពចូលមូលដ្ឋាន។ ឥឡូវសូមបង្កើតទម្រង់បែបបទសម្រាប់ទិដ្ឋភាពដោយពង្រីកគំរូមូលដ្ឋាន។ យើងនឹងចាប់ផ្តើមដោយការបង្កើតថតឯកសារថ្មីសម្រាប់ពុម្ពនៅក្នុងថតឯកសារអ្នកប្រើប្រាស់។
អ្នកប្រើ / គំរូ MKDir
អ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / អ្នកប្រើប្រាស់ឥឡូវនេះយើងគួរតែអាចកែសម្រួលអ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / in log.html ។ ខណៈពេលដែលយើងនៅវាយើងនឹងបង្កើតគំរូមួយដែលអនុញ្ញាតឱ្យអ្នកប្រើប្រាស់ចុះឈ្មោះផងដែរ។
Nano អ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / loghtmlឥឡូវនេះនៅក្នុងគំរូ,
{% ពង្រីក 'basic.html'%} {% ផ្ទុក crispy_forms_tags%} {% dincess មាតិកា%} {% csrf_token%} ចូល {{Form | Crispy}} ចូល {% endblock%}នេះគឺជាមូលដ្ឋានគ្រឹះនៃពុម្ពចូល។ វាពិតជាដូចគំរូផ្សេងទៀតនៅក្នុងរចនាសម្ព័ន្ធដែរប៉ុន្តែវាមើលទៅដូចជាខុសគ្នាបន្តិចបន្តួចនៅពេលដែលវាត្រូវបានបង្ហាញ។ យើងអាចចម្លងកូដនេះដើម្បីបង្កើតគំរូស្រដៀងគ្នាមួយទៀតដែលគេហៅថា regight.html ដែលយើងនឹងផ្លាស់ប្តូរពាក្យហើយប្រើទម្រង់ថ្មីដែលយើងបង្កើត។ តោះធ្វើគំរូជាមុនសិន។ កែសម្រួលអ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / ចុះឈ្មោះ.htmlហើយបន្ថែមលេខដូចខាងក្រោម:
{% ពង្រីក 'basic.html'%} {% ផ្ទុក crispy_forms_tags%} {% dincess មាតិកា%} {% csrf_token%} បង្កើតគណនី {{Form | Crispy}} ការចុហបហ្ជី {% endblock%}ឥឡូវនេះសូមបង្កើតទម្រង់បែបបទសម្រាប់ការចុះឈ្មោះអ្នកប្រើនិងរង្វង់របស់យើងត្រលប់ទៅទស្សនៈមុនពេលដែលយើងធ្វើឱ្យប្រសើរឡើងនូវការចូលអ្នកប្រើប្រាស់របស់យើងជាមួយនឹងគំរូ។ យើងនឹងធ្វើឱ្យទម្រង់បែបបទនេះជាមូលដ្ឋានដើម្បីចាប់ផ្តើមជាមួយប៉ុន្តែបញ្ចូលព័ត៌មានលម្អិតបន្ថែមទៀតនិងលក្ខណៈសុវត្ថិភាពដូចជាកិច្ចព្រមព្រៀងនិង CAPTCHA នាពេលអនាគត។ កែសម្រួលទម្រង់បែបបទជាមួយអ្នកប្រើប្រាស់ណាណូ / Forms.py និងបន្ថែមលេខកូដខាងក្រោម។
ពីទម្រង់ការនាំចូល Django ពី Django.contrib.Auth.Models នាំចូលអ្នកប្រើប្រាស់ ពី Django.contrib.auth.Forms នាំចូលការប្រើការប្រើអ្នកប្រើ ក្រុមហ៊ុន Userregisterform ក្នុងថ្នាក់ (FRYMERRIMVEMationformation): អ៊ីម៉ែល = Forms.emailfield () មេតាថ្នាក់: ម៉ូដែល = អ្នកប្រើប្រាស់ វាល = ['ឈ្មោះអ្នកប្រើ', 'អ៊ីមែល', 'passerf1', 'passert2']from django import forms
from feed.models import Post
class PostForm(forms.ModelForm):
text = forms.CharField(widget=forms.Textarea)
class Meta:
model = Post
fields = ('text',)
ដូច្នេះយើងមានទម្រង់មួយទៀតនៅទីនេះដែលធ្វើការយ៉ាងសាមញ្ញ។ វាជាទម្រង់ចុះឈ្មោះរបស់អ្នកប្រើប្រាស់ដែលមានឈ្មោះអ្នកប្រើអ៊ីមែលនិងលេខសម្ងាត់ក៏ដូចជាវាលពាក្យសម្ងាត់បញ្ជាក់។ ចំណាំថាទម្រង់នេះមិនពង្រីកសំណុំបែបបទធម្មតាទេវាជាទម្រង់គំរូដែលមានន័យថាវាមានមេតា។ វាលមួយត្រូវបានកំណត់ដូចគ្នាមួយដូចគ្នាហើយមេតាថ្នាក់កំណត់គំរូដែលសំណុំបែបបទត្រូវគ្នាទៅនឹងព័ត៌មានដែលនៅសល់ដែលនឹងត្រូវបានសរសេរទៅទម្រង់។ ភាគច្រើននៃនេះមាននៅក្នុង Django ដែលត្រូវបានសាងសង់ដោយប្រើដោយប្រើការប្រើការប្រើអ្នកប្រើដូច្នេះយើងនឹងប្រើវាជាមូលដ្ឋានសម្រាប់ថ្នាក់ (បានឆ្លងកាត់វង់ក្រចក) ។បន្ទាប់យើងនឹងពិនិត្យមើលទស្សនៈក្នុងការចុះឈ្មោះអ្នកប្រើប្រាស់ឥឡូវនេះដែលយើងមានសំណុំបែបបទនិងគំរូ។ នេះគឺជាទម្រង់គំរូមួយដូចគ្នានឹងមួយនៅក្នុងទិដ្ឋភាពប្រកាសថ្មី។ កែសម្រួលអ្នកប្រើប្រាស់ / មើល .py ហើយបន្ថែមលេខដូចខាងក្រោម:
# ... ការនាំចូល ពី .forms នាំចូល UserregisterRiegisterform ចុះឈ្មោះ (ការស្នើសុំ): ប្រសិនបើសំណើ .method == "ប្រកាស": ទម្រង់ = USerregisterform (use.post) ប្រសិនបើ Form.is_valid (): អ្នកប្រើប្រាស់ = Form.Save () សារ .scess (សំណើរសុំសូមស្វាគមន៍ចំពោះកម្មវិធី {} ។ '។ ទ្រង់ទ្រាយ (user.username)) ត្រឡប់ការបង្ហាញ (សំណើរ 'អ្នកប្រើប្រាស់ / ចុះឈ្មោះ.html', {'ទម្រង់បែបបទ': userregisterform})python manage.py makemigrations
python manage.py migrate
... ការនាំចូលនេះគឺជាអ្វីដែលយើងត្រូវការដើម្បីទទួលបានអ្នកប្រើដែលបានចុះឈ្មោះប៉ុន្តែយើងគួរតែមានព័ត៌មានបន្ថែម។ យើងចង់ដឹងពីពេលវេលាដែលអ្នកប្រើប្រាស់បានចុះឈ្មោះតើមានពេលវេលាប៉ុន្មាននៅលើគេហទំព័រព័ត៌មានខ្លះដូចជាជីវប្រវត្តិពេលវេលាដែលយើងនឹងត្រូវធ្វើបច្ចុប្បន្នភាពម៉ូដែលមតិព័ត៌មានរបស់យើងដើម្បីទទួលខុសត្រូវចំពោះម៉ូដែលអ្នកប្រើប្រាស់និងប្រទះឃើញការបង្ហោះរបស់អ្នកប្រើប្រាស់ម្នាក់ៗ។ ក្នុងគោលបំណងដើម្បីធ្វើដូច្នេះយើងនឹងធ្វើបច្ចុប្បន្នភាពម៉ូដែលនេះនៅក្នុងកម្មវិធីទាំងពីរ។ ចូរចាប់ផ្តើមដោយកែសម្រួលគំរូមតិព័ត៌មាន។ វាគួរតែមើលទៅដូចនេះឥឡូវនេះ:
ពីការនាំចូលម៉ូឌែល Django.dB ពី Django.contrib.Auth.Models នាំចូលអ្នកប្រើប្រាស់ ប៉ុស្តិ៍ថ្នាក់ (ម៉ូឌែលមជែល): លេខសម្គាល់ = Models.autofield (បឋម (បឋម = ពិត) អ្នកនិពន្ធ = ម៉ូឌែល។ អត្ថបទ = Modeels.Text.Text (លំនាំដើម = '') posts = Post.objects.all() # ... ការនាំចូល
បន្ថែមក្នុងបន្ទាត់នេះយកចិត្តទុកដាក់លើខ្សែទីពីរដែលត្រូវបានបន្ថែមទៅក្នុងឯកសារ។ នេះគឺជាកូនសោរបរទេសដែលនឹងសន្មតថាអ្នកប្រើនីមួយៗសម្រាប់អ្នកប្រើតែមួយក្នុងមួយប្រកាសដូច្នេះយើងអាចធ្វើឱ្យប្រាកដថាយើងរក្សាទុកប្រកាសនៅលើមូលដ្ឋានអ្នកប្រើប្រាស់ក្នុងមួយនាក់និងគ្មានប្រកាសអាចធ្វើបានដោយមិនចាំបាច់ដាក់វាទៅអ្នកប្រើ។ យើងកំណត់កូនសោរបរទេសនេះជាមួយថ្នាក់វាតំណាងឱ្យការឈ្លោះប្រកែកគ្នាលុបដើម្បីធានាបាននូវការជជែកវែកញែកដោយប្រើអ្នកប្រើដែលយើងបានបង្កើតឡើងហើយដែលយើងអាចប្រើដើម្បីយោងទៅលើការបង្ហោះដែលអ្នកប្រើប្រាស់បានបង្កើត។ ឈ្មោះពាក់ព័ន្ធនេះមិនដូចប៉ុស្តិ៍ទេ។ អ្នកនិពន្ធនៃកាសែតភ្នំពេញប៉ុស្តិ៍ផ្តល់ឱ្យអ្នកប្រើដែលបានបង្ហោះប្រកាសនេះ។ ឥឡូវនេះយើងអាចទទួលបានប្រកាសអ្នកប្រើដែលធ្វើឡើងដោយការរត់ user.posts.all () ឬ yout.posts.all () ។
ឥឡូវនេះសូមធ្វើឱ្យការចូលរបស់យើងកាន់តែមានភាពរឹងមាំ។ យើងអាចធ្វើឱ្យគេហទំព័ររបស់យើងងាយរងគ្រោះដោយងាយនឹងការផ្ទុះដោយគ្រាន់តែវាយតម្លៃការកំណត់ចំនួនដងដែលយើងនឹងអនុញ្ញាតឱ្យចូលគេហទំព័រនេះគឺងាយស្រួលណាស់។ តោះចាប់ផ្តើមរក្សាទុកព័ត៌មានមួយចំនួនអំពីអ្នកប្រើប្រាស់ម្នាក់ៗមុនពេលដែលយើងបន្តអភិវឌ្ឍកម្មវិធីរបស់យើង។ ការកែសម្រួលអ្នកប្រើប្រាស់ / Models.py បន្ថែមលេខកូដខាងក្រោម។ពីម៉ូឌែលនាំចូល Django.dB ពី Django.contrib.Auth.Models នាំចូលអ្នកប្រើប្រាស់ ពី Django.utils នាំចូល Tenzone នាំចូល ប្រវត្តិរូបថ្នាក់ (ម៉ូដែល .model): អ្នកប្រើ = Models.onetoonefield (អ្នកប្រើប្រាស់, នៅលើ on_delete = models.casse, null = ពិត, ទទេ = ពិត, ដែលទាក់ទងនឹងឈ្មោះក្លែងក្លាយ = 'ប្រវត្តិរូប') គណនេយ្យ _created = Models.Datetimefield (លំនាំដើម = Timezone.Now) ចុងក្រោយ = Models.Datetimefield (លំនាំដើម = Timezone.Now) Can_login = Models.Datetimefield (លំនាំដើម = Timezone.Now) refutiname = models.Charfield (ប្រវែងអតិបរមា = 20 លំនាំដើម = '', '' NULL = ពិត, ទទេ = ពិត) ជីវ = Models.textfield (ទទេ = ពិតលំនាំដើម = '')
ចំណាំថាម៉ូដែលនេះស្រដៀងនឹងម៉ូដែលភ្នំពេញប៉ុស្តិ៍។ យើងមានការនាំចូលបន្ថែមទៀត, Timezone, ដែលនឹងអនុញ្ញាតឱ្យយើងកំណត់លំនាំដើមនៅលើវាល DateTime ហើយយើងក៏មានតួអក្សរនិង Text Texte Firefield ដូចភ្នំពេញប៉ុស្តិ៍ផងដែរ។ ការប្រើប្រាស់ត្រាពេលវេលាទាំងអស់នេះជួយឱ្យយើងទទួលបានគេហទំព័រនេះហើយយល់ពីការប្រើប្រាស់របស់វាហើយវាលអត្ថបទអនុញ្ញាតឱ្យយើងបង្ហាញព័ត៌មានអំពីអ្នកប្រើប្រាស់ម្នាក់ៗឬអ្នកនិពន្ធនៅលើគេហទំព័រ។ OneToonefield គួរតែជាការពិចារណាតែមួយគត់វាមានឥរិយាបទដូចគ្នានឹង oreginey ដែរប៉ុន្តែមានតែមួយក្នុងមួយម៉ូដែលជាបន្តបន្ទាប់។ វិធីនេះអ្នកប្រើមានតែទម្រង់មួយប៉ុណ្ណោះខណៈពេលដែលពួកគេអាចមានប្រកាសជាច្រើន។mkdir feed/templates
mkdir feed/templates/feed
ឥឡូវសូមលើកកម្ពស់ការចូលរបស់យើងហើយចុះឈ្មោះមើលដើម្បីទទួលបានគណនីសម្រាប់ទម្រង់។ ទីមួយកែសម្រួលអ្នកប្រើប្រាស់ / មើល .py ហើយផ្តោតលើការចុះឈ្មោះចូល:# ... ការនាំចូល ពី .forms នាំចូល UserregisterRiegisterform ចុះឈ្មោះ (ការស្នើសុំ): ប្រសិនបើសំណើ .method == "ប្រកាស": ទម្រង់ = USerregisterform (use.post) ប្រសិនបើ Form.is_valid (): អ្នកប្រើប្រាស់ = Form.Save () Profile.objects.Create (អ្នកប្រើប្រាស់ = អ្នកប្រើប្រាស់) # ត្រូវប្រាកដថាបន្ថែមបន្ទាត់នេះដើម្បីបង្កើតទម្រង់សម្រាប់អ្នកប្រើប្រាស់ សារ .scess (សំណើរសុំសូមស្វាគមន៍ចំពោះកម្មវិធី {} ។ '។ ទ្រង់ទ្រាយ (user.username)) ត្រឡប់ការបង្ហាញ (សំណើរ 'អ្នកប្រើប្រាស់ / ចុះឈ្មោះ.html', {'ទម្រង់បែបបទ': userregisterform})
... ការនាំចូល
ត្រូវប្រាកដថាបន្ថែមបន្ទាត់នេះដើម្បីបង្កើតទម្រង់សម្រាប់អ្នកប្រើប្រាស់នេះគ្រាន់តែបង្កើតទម្រង់សម្រាប់អ្នកប្រើដោយមិនចាំបាច់បំពេញព័ត៌មានណាមួយឡើយ។ ឥឡូវនេះយើងចង់ធ្វើឱ្យប្រាកដថាគណនីអ្នកប្រើប្រាស់មិនអាចចូលបានញឹកញាប់ឬយ៉ាងហោចណាស់ពាក្យសម្ងាត់មិនអាចត្រូវបានព្យាយាមញឹកញាប់ពេកទេដូច្នេះសូមធ្វើបច្ចុប្បន្នភាពទិដ្ឋភាពចូល។
# ... ការនាំចូល ពីទម្រង់នៃការនាំចូល .models ពី Django.utils នាំចូល Tenzone នាំចូល នាំចូលទិន្នន័យ Def ចូល (ការស្នើសុំ): ប្រសិនបើសំណើ .method == "ប្រកាស": ឈ្មោះអ្នកប្រើ = ense.post ['ឈ្មោះអ្នកប្រើ] លេខសម្ងាត់ = onst.post ['ពាក្យសម្ងាត់'] អ្នកប្រើ = ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ (ឈ្មោះអ្នកប្រើ = ឈ្មោះអ្នកប្រើពាក្យសម្ងាត់ = ពាក្យសម្ងាត់) ប្រសិនបើអ្នកប្រើប្រាស់និង user.profile.can_login <Timzhone.Now (): #): # ចំណាំថាឥឡូវនេះយើងកត់សម្គាល់ថាឥឡូវនេះយើងពិនិត្យមើលថាតើអ្នកប្រើអាចចូលបានទេ Auth_login (សំណើ, អ្នកប្រើ backend = 'django.contrib.auth.Authense.modelbends') សារ .scess (សំណើរ 'ពាក្យសម្ងាត់របស់អ្នកត្រូវបានទទួលយក។ សូមបន្ត។ ') ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('ចំណី: ចំណី')) ផ្សេងទៀត: # ប្រសិនបើការចូលមិនជោគជ័យ សារ អ្នកប្រើប្រាស់ = user.objects.filter (ឈ្មោះអ្នកប្រើ = ឈ្មោះអ្នកប្រើ) .first () # នេះគឺជាផ្នែកដែលយើងធ្វើបច្ចុប្បន្នភាពទម្រង់អ្នកប្រើប្រាស់ ប្រសិនបើអ្នកប្រើប្រាស់: ទម្រង់ = user.profile Profoct.can_login = Timezone.Now () + Datetime.timeDelta (វិនាទី = 15) # ដូច្នេះពួកគេមិនអាចចូលម្តងទៀតបានពីរបីវិនាទីទៀតទេ ទម្រង់ () ត្រឡប់ការផ្តល់ជូនវិញ (សំណើរ 'អ្នកប្រើប្រាស់ / login.html', {'ទម្រង់បែបបទ': ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ()})python manage.py shell
... ការនាំចូលចំណាំថាឥឡូវនេះយើងពិនិត្យមើលថាតើអ្នកប្រើអាចចូលបានទេ
ប្រសិនបើការចូលមិនជោគជ័យfrom feed.models import Post
នេះគឺជាផ្នែកដែលយើងធ្វើបច្ចុប្បន្នភាពប្រវត្តិរូបអ្នកប្រើប្រាស់ដូច្នេះពួកគេមិនអាចចូលម្តងទៀតបានពីរបីវិនាទីទៀតទេ
នេះគឺជាមូលដ្ឋានគ្រឹះមូលដ្ឋាននៃសន្តិសុខ។ ត្រូវប្រាកដថាគេហទំព័រមិនងាយរងគ្រោះដល់នរណាម្នាក់ដោយគ្រាន់តែព្យាយាមបន្សំពាក្យសម្ងាត់ដែលអាចទុកចិត្តបានឬសូម្បីតែពីរបីក្នុងចំណោមពួកគេក្នុងពេលតែមួយ។ នេះនឹងមិនធ្វើឱ្យអ្នកប្រើធម្មតាដែលដឹងលេខកូដរបស់ពួកគេហើយគ្រាន់តែចូលឧបករណ៍ពីរបីប៉ុន្តែវានឹងរក្សារ៉ូបូតដែលមានភាពឆបោកជាច្រើនចេញពីកម្មវិធីនេះ។ ចំណាំថាយើងបានបន្ថែមសេចក្តីថ្លែងការណ៍ប្រសិនបើមានសេចក្តីថ្លែងការណ៍មួយដែលមានអថេរមួយ, អាចជាពេលវេលាដែលគួរតែមាននៅពេលកន្លងមកហើយធ្វើឱ្យទាន់សម័យវាដោយការចូលមិនជោគជ័យដោយប្រើឈ្មោះអ្នកប្រើដូចគ្នា។ វិធីនេះអ្នកប្រើដែលមានគំនិតអាក្រក់នឹងមិនអាចទាយបានទេចង់នៅគ្រប់ទីកន្លែងជិតរហ័ស។ ចំនួនវិនាទីនៅក្នុង Datetime.TimEdeTa () អាចត្រូវបានធ្វើបច្ចុប្បន្នភាពផងដែរហើយគេហទំព័រនឹងកាន់តែមានភាពធន់កាន់តែខ្លាំងក្លាតិចជាងនេះបន្តិចដែលអាចប្រើបានបន្តិចបន្តួចដែលមានរយៈពេលច្រើនទៀត។ ខ្ញុំសូមណែនាំ 15 ដើម្បីចាប់ផ្តើមជាមួយ។Post.objects.create(text='hello world')
exit()
សូមចាំថាយើងបានបង្កើតស្គ្រីបបម្រុងទុកដើម្បីរក្សាទុកការងាររបស់យើងដូច្នេះសូមបន្តទៅមុខទៀតហើយគាំទ្រនូវអ្វីដែលយើងមានរហូតមកដល់ពេលនេះដើម្បីធ្វើឱ្យប្រាកដថាយើងបានរក្សាទុកអ្វីគ្រប់យ៉ាង។ ដំណើរការពាក្យបញ្ជា:ការបម្រុងទុកស៊ូដូ
ជាថ្មីម្តងទៀតនេះនឹងជួយសង្រ្គោះការងាររបស់អ្នករហូតមកដល់ពេលនេះ។ ខ្ញុំសូមណែនាំឱ្យដំណើរការបម្រុងទុកញឹកញាប់ដើម្បីរក្សាទុកការងាររបស់អ្នកហើយអ្នកក៏អាចចង់ដំណើរការការងារបម្រុងទុកដោយស្វ័យប្រវត្តិដែរ។ អ្នកអាចធ្វើដូចនេះដោយប្រើឧបករណ៍ប្រើប្រាស់យូនីកមួយដែលមានឈ្មោះថា Cron ។ ដើម្បីធ្វើឱ្យឧបករណ៍ប្រើប្រាស់នេះសកម្មដំណើរការពាក្យបញ្ជាខាងក្រោមហើយបញ្ចូលពាក្យសម្ងាត់របស់អ្នក:from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
sudo crontab -eប្រសិនបើអ្នកមិនទាន់ជ្រើសរើសជម្រើសទី 1 សម្រាប់ណាណូកម្មវិធីនិពន្ធអត្ថបទអ្នកគួរតែធ្លាប់ស្គាល់រួចទៅហើយហើយរំកិលទៅផ្នែកខាងក្រោមនៃឯកសារដោយប្រើគ្រាប់ចុចព្រួញ។ បន្ថែមបន្ទាត់ខាងក្រោម:
0 * * * * * ការបម្រុងទុកស៊ូដូfrom django.urls import include # Cron ប្រើទ្រង់ទ្រាយនៅនាទី, ម៉ោង, ថ្ងៃនៃខែ, ខែ, ថ្ងៃនៃសប្តាហ៍, ដែលជាចំនួន * ឬលេខតំណាងឱ្យដំណើរការនៅពេលដំណើរការពាក្យបញ្ជា។ ដោយប្រើលេខ 0 សម្រាប់នាទីនិង * សម្រាប់ជម្រើសដែលនៅសល់យើងអាចដំណើរការពាក្យបញ្ជានៅនាទីដំបូងនៃរាល់ម៉ោងនៅដើមនាទី។ នេះអនុញ្ញាតឱ្យយើងបម្រុងទុកលេខកូដដោយស្វ័យប្រវត្តិ។ ទាំងអស់នៃការងាររបស់ Cron នៅពេលប្រតិបត្តិជាមួយ Sudo រត់ជា root ដូច្នេះយើងមិនចាំបាច់វាយបញ្ចូលពាក្យសម្ងាត់រាល់ម៉ោងទេ។
# ដើម្បីធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការបម្រុងទុកក្រមរបស់យើងដោយមិនប្រើពាក្យសម្ងាត់សូមចុចពាក្យសម្ងាត់សម្រាប់ពាក្យបញ្ជាបម្រុងទុករបស់យើង។ យើងនឹងធ្វើដូច្នេះដោយប្រតិបត្តិពាក្យបញ្ជាដូចខាងក្រោមហើយបញ្ចូលពាក្យសម្ងាត់:
Sudo Visudoឥឡូវសូមរំកិលទៅផ្នែកខាងក្រោមនៃឯកសារហើយបន្ថែមបន្ទាត់មួយទៀត:
ទាំងអស់ = nopasswd: / bin / backupbackup
នេះអនុញ្ញាតឱ្យយើងដំណើរការពាក្យបញ្ជា "បម្រុងទុក" ជាអ្នកប្រើណាមួយដោយគ្មានពាក្យសម្ងាត់។ ទ្រង់ទ្រាយសម្រាប់ការនេះមានភាពងាយស្រួលគ្រាន់តែគ្រាន់តែជាបុព្វបទដែលមាន "ទាំងអស់ = nopasswd: /" ទាំងអស់ / "និង" ហើយបញ្ចប់ដោយពាក្យបញ្ជាឧទាហរណ៍, ឧទាហរណ៍, ដែលមាននៅក្នុង / usr / bin / bin / bin / bin / bin / bin / bon ។ឥឡូវសូមចាប់ផ្តើមធ្វើការជាមួយអ៊ីម៉ែល។ អ៊ីម៉ែលពិតជាមានសារៈសំខាន់សម្រាប់គេហទំព័រពីព្រោះវាជាវិធីមួយដើម្បីរក្សាគេហទំព័រឱ្យមានសុវត្ថិភាពជាងមុន, ផ្ទៀងផ្ទាត់អ្នកប្រើគឺជាមនុស្សពិតប្រាកដហើយសូម្បីតែសេវាកម្មទីផ្សារដល់អតិថិជន។ មនុស្សជាច្រើនដែលមានអ៊ិនធឺរណែតញឹកញាប់សូមពិនិត្យមើលអ៊ីម៉ែលប្រចាំថ្ងៃរបស់ពួកគេហើយទទួលបានអ៊ីមែលទីផ្សារគ្រប់ប្រភេទអំពីផលិតផលនិងសេវាកម្មដែលពួកគេចាប់អារម្មណ៍។
ដំបូងអ្នកអាចបង់ប្រាក់សម្រាប់សេវាកម្មអ៊ីមែលដែលអាចឱ្យអ្នកផ្ញើអ៊ីមែលពីដែនរបស់អ្នកហើយត្រូវការលេខកូដអប្បបរមា។ មានសេវាកម្មជាច្រើនដែលផ្តល់ជូននេះដូចជា Google Wordpace, SendinBublue MailGun និងច្រើនទៀត។ posts = Post.objects.all() # បើមិនដូច្នោះទេអ្នកមានសុខភាពល្អក្នុងការបង្កើតសេវាកម្មអ៊ីមែលផ្ទាល់ខ្លួនរបស់អ្នកនៅក្នុងម៉ាស៊ីនមេរបស់អ្នកពីដំបូង។ ខ្ញុំសូមណែនាំជម្រើសនេះទោះបីជាវាមានលេខកូដបន្ថែមទៀតក៏ដោយហើយអាចត្រូវការការបង្ហោះពិសេស។ អ្នកនឹងមិនអាចចាប់ផ្តើមម៉ាស៊ីនមេម៉ែលពីកុំព្យូទ័រនៅផ្ទះរបស់អ្នកដែលទំនងជាអនុញ្ញាតឱ្យទៅមុខហើយពិនិត្យមើលការកំណត់រចនាសម្ព័ន្ធនិងកូដដើម្បីផ្ញើអ៊ីមែលមុនពេលយើងចាប់ផ្តើមម៉ាស៊ីនមេនៅក្នុងពពកនិងបង្កើតម៉ាស៊ីនមេម៉ែលរបស់យើងនៅខាងក្នុង។
if request.method == 'POST': # ដំបូងកែតំរែតំរង់ .py ជាមួយពាក្យបញ្ជាខាងក្រោម:
form = PostForm(request.POST) # Nano App / Settings.py
if form.is_valid(): # កន្លែងដែលកម្មវិធីគឺជាឈ្មោះរបស់កម្មវិធីដែលអ្នកបានបង្កើតជាមួយ startapp ។
form.save() # បន្ថែមបន្ទាត់ដូចខាងក្រោមៈ
return redirect(reverse('feed:feed')) # គេហទំព័រ = 'django កម្មវិធី'
Email_Backend = 'django.core.mail.mends.mpailbellend
Email_host = 'localhost'
Email_port = 587
email_use_tls = ពិត
email_address = Usernam@server.com '
email_host_user = 'ឈ្មោះអ្នកប្រើ'
email_host_password = config ['email_host_password']
Defaulm_from_email = '{} <{}>' ទ្រង់ទ្រាយ (គេហទំព័រ siteite_name, email_host_user)
'form': PostForm(), # ត្រូវប្រាកដថាផ្លាស់ប្តូរចំណុចទាំងនេះនៅពេលអ្នកត្រៀមខ្លួនរួចរាល់ហើយក្នុងការដាក់ពង្រាយកម្មវិធីរបស់អ្នកយើងនឹងពិនិត្យមើលនៅពេលក្រោយ។ ការកំណត់អ៊ីម៉ែល @Address គួរតែជាអ៊ីមែលដែលអ្នកចង់ផ្ញើពីហើយពាក្យសម្ងាត់ (Email_host_password) គួរតែត្រូវបានកំណត់ទៅពាក្យសម្ងាត់ដែលអ្នកបង្កើតសម្រាប់ម៉ាស៊ីនមេ។ ខ្ញុំផ្ទុកលេខសម្ងាត់ចេញពីឯកសារ Config ដើម្បីរក្សាវាចេញពីកូដដោយប្រើតក្កដូចខាងក្រោមបន្ទាត់ទាំងនេះក្នុងការកំណត់ការកំណត់ .py:
នាំចូល OS
នាំចូល Json
ជាមួយនឹងការបើក ('/ etc / config.json') ជា config_file:
config = json.load (config_file)បន្ទាប់មកខ្ញុំបានបង្កើតឯកសារ JSON មួយដែលមានកំណត់រចនាសម្ព័ន្ធនៅក្នុង /etc/config.json ដោយប្រើណាណូដូចខាងក្រោម។
Sudo Nano /etc/config.json
បន្ថែមបន្ទាត់ដូចខាងក្រោមៈ{ "email_host_password" "" បាន
យើងនឹងបន្តកែសម្រួលឯកសារកំណត់រចនាសម្ព័ន្ធហើយបន្ថែមលេខសម្ងាត់និងគ្រាប់ចុចទាំងអស់ដែលយើងនឹងប្រើក្នុងកម្មវិធី។ សម្រាប់ពេលនេះសូមពិនិត្យមើលរបៀបផ្ញើអ៊ីមែលដោយប្រើពស់ថ្លាន់។ ដំបូងយើងត្រូវបង្កើតគំរូសម្រាប់អ៊ីម៉ែលផ្ទៀងផ្ទាត់ដែលយើងអាចផ្ញើទៅអ្នកប្រើប្រាស់របស់យើងហើយដាក់វានៅក្នុងថតឯកសារអ្នកប្រើប្រាស់។ គំរូនេះនឹងត្រូវបានសរសេរជា HTML ។អ្នកប្រើប្រាស់ / ពុម្ព / ពុម្ព / អ្នកប្រើប្រាស់ / ការផ្ទៀងផ្ទាត់ emife_email.html
Django App - ផ្ទៀងផ្ទាត់អ៊ីមែលរបស់អ្នក សូមគោរព {{{{user.username}} ដើម្បីផ្ទៀងផ្ទាត់អ៊ីមែលរបស់អ្នកសូមចុចត្រង់នេះ។ ម៉្យាងវិញទៀតអ្នកអាចបិទភ្ជាប់តំណខាងក្រោមនៅក្នុងរបាអាស័យដ្ឋានរបស់អ្នក: អ្នកប្រើប្រាស់ {{base_url}} {% url '{% url' ធ្វើឱ្យសកម្ម 'UIDB64 = UID Toven = Token%} តំណនឹងផុតកំណត់ក្នុងរយៈពេល 30 នាទី។ ប្រសិនបើអ្នកមិនបានស្នើសុំអ៊ីមែលផ្ទៀងផ្ទាត់អ្នកគ្រាន់តែមិនអើពើនឹងអ៊ីមែលនេះ។ ជួបអ្នកនៅទីនោះ រនាក់អ៊ីមែលនេះគឺសាមញ្ញណាស់។ វាត្រូវការបរិបទរបស់អ្នកប្រើប្រាស់ URL មូលដ្ឋានសម្រាប់គេហទំព័រនិងលេខសម្គាល់អ្នកប្រើនិងនិមិត្តសញ្ញាដែលត្រូវបានប្រើដើម្បីប្រើដើម្បីផ្ទៀងផ្ទាត់អ៊ីមែលរបស់អ្នកប្រើប្រាស់។ ត្រូវប្រាកដថាកំណត់ URL មូលដ្ឋាននៅក្នុង settings.py មុនពេលយើងសរសេរលេខកូដ Python មួយចំនួនដើម្បីបង្ហាញគំរូ។ ទៅមុខហើយបន្ថែមបន្ទាត់ដូចខាងក្រោមទៅកម្មវិធី / settings.py ជិតដល់ដើមហើយ។គេហទំព័រ = 'django កម្មវិធី' ពិធីសារ = 'https' ដែន = 'example.com' Base_url = ពិធីការ + ':: //' + + ដែននៅទីបំផុតនៅពេលដែលគេហទំព័ររបស់អ្នកបានត្រៀមរួចរាល់សម្រាប់អ៊ិនធឺរណែតហើយអ្នកដាក់ពង្រាយវាអ្នកនឹងចង់កំណត់ដែនរបស់អ្នកជាឈ្មោះដែនដែលអ្នកទិញដើម្បីតំណាងឱ្យគេហទំព័រ។ នេះគឺជាឈ្មោះដែលអ្នកនឹងវាយបញ្ចូលក្នុង Navbar ដើម្បីចូលដំណើរការគេហទំព័ររបស់អ្នក។ សម្រាប់ពេលនេះអ្នកអាចទុកដែនឱ្យនៅទទេឬប្រើកន្លែងដាក់។ អ្នកក៏នឹងចង់ផ្លាស់ប្តូរឈ្មោះគេហទំព័រទៅជាឈ្មោះដែលអ្នកចង់ផ្តល់ឱ្យគេហទំព័ររបស់អ្នកនូវការជ្រើសរើសរបស់អ្នក។
មុនពេលយើងផ្ញើអ៊ីមែលសូមបង្កើតម៉ាស៊ីនភ្លើងថូខឹនដូច្នេះយើងអាចមាននិមិត្តសញ្ញាធ្វើឱ្យសកម្មគណនីដែលមិនដែលផុតកំណត់។ យើងអាចធ្វើដូចនេះបានដោយការកសាងនិងនាំចូលនិមិត្តសញ្ញាធ្វើឱ្យសកម្មគណនីដែលមើលទៅដូចខាងក្រោម។ កែសម្រួលឯកសារ:អ្នកប្រើប្រាស់ណាណូ / Tokens.py
បន្ថែមលេខកូដខាងក្រោម:ពី Django.contrib.auth.tok.toker នាំចូលពាក្យសម្ងាត់លេខសម្ងាត់ នាំចូលប្រាំមួយ Tockengenerator ថ្នាក់ (លេខសម្ងាត់ ascendriesettokengenerator): def _Make_hash_value (ខ្លួនឯងអ្នកប្រើប្រាស់ពេលវេលាត្រាពេលវេលា): ត្រឡប់ ( 6.text_type (user.pk) + 6.text_textpe (ត្រាធីធីភី (ត្រាធីធីអេសភី) ដេលនិយ័តករ) គណនេយ្យ _ASTIVAMT_TOKEN = Tokengenerator () Unsubscribe_token = tokengenerator ()
ម៉ាស៊ីនភ្លើងថូខឹនមូលដ្ឋាននេះបង្កើតនិមិត្តសញ្ញាមួយដែលយើងអាចផ្ញើអ្នកប្រើក្នុង URL ហើយអ្នកប្រើប្រាស់អាចប្រើដើម្បីផ្ទៀងផ្ទាត់អ៊ីមែលរបស់ពួកគេហើយធ្វើឱ្យគណនីរបស់ពួកគេសកម្ម។
បន្ទាប់សូមមើលរបៀបផ្ញើអ៊ីមែល។ ការប្រើប្រាស់ណាណូ, កែសម្រួលអ្នកប្រើប្រាស់ / email.py ។អ្នកប្រើប្រាស់ណាណូ / អ៊ីម៉ែល
ការផ្ញើអ៊ីមែល HTML ផ្ទៀងផ្ទាត់នឹងមើលទៅដូចនេះ:ពី Django.contrib.auth នាំចូល get_user_model ពី Django.utils.HTTP នាំចូល Urlsafe_base64_xode, urlsafe_base64_dase64_deede ពី Django.contrib.sites.shortcuts នាំចូល it_current_site ពីការនាំចូល Django.Core.Mail ពី Django.template. ផ្ទុកការនាំចូល _to_string ពី django.utils.endilding កម្លាំងនាំចូល _bytes នាំចូលអ៊ីម៉ែលរបស់ Django.More.Mail ពីការនាំចូល Django.shortcuts ពី .tokens account account_activation_token ពី Django.template. ផ្ទុកការនាំចូល _to_string ពី Django.utils.HTML ការនាំចូល ពី django.template គំរូនាំចូល, បរិបទ ពីការកំណត់នាំចូល Django.conf នាំចូល Traceback def ផ្ញើ read_verication_email (អ្នកប្រើប្រាស់): អ្នកប្រើប្រាស់ = Get_user_Model () Mail_Subject = '[{}] ធ្វើឱ្យគណនីរបស់អ្នកសកម្ម។ "ទ្រង់ទ្រាយ (setting.site_name) HTML_MESSAGE = ធ្វើឱ្យតម្លៃ ('អ្នកប្រើប្រាស់ / ផ្ទៀងផ្ទាត់ emife_email.html' { 'អ្នកប្រើប្រាស់': អ្នកប្រើប្រាស់ 'ដែន': settings.dome.domain, 'ពិធីសារ': 'https', 'uid': urlsafe_base64_xode (force_bytes (user.pk),), 'ថូខឹន': គណនេយ្យ _ASTIVAMT_TOKEN.Make_Token (អ្នកប្រើប្រាស់) }) ផ្ញើ _HTML_EMAIL (អ្នកប្រើប្រាស់, សំបុត្រសំបុត្រ, HTML_Message)
នេះគឺសាមញ្ញណាស់។ យើងនាំចូលមុខងារដែលយើងត្រូវផ្ញើអ៊ីមែលដែលមានគំរូនិងការកំណត់របស់យើងហើយបន្ទាប់មកយើងកំណត់អ៊ីម៉ែលដោយឈ្មោះគំរូហើយផ្ញើវាទៅអ្នកប្រើដោយប្រើមុខងារ។ អ្នកនឹងកត់សំគាល់ថាយើងមិនបានកំណត់មុខងារផ្ញើអ៊ីមែលទេសូមផ្ញើអ៊ីមែលដូច្នេះតោះសរសេរវានៅខាងក្រោមលេខកូដដែលយើងបានបន្ថែមទៅអ្នកប្រើប្រាស់ / អ៊ីម៉ែលpip install django-crispy-forms
Def Send_html_email (អ្នកប្រើប្រាស់, សំបុត្រសំបុត្រ - ការការពារ, html_message, html_message):
to_email = អ្នកប្រើប្រាស់
ឈ្មោះអ្នកប្រើ = user.username
ប្រសិនបើ to_email == '': '
មិនមានទេ
unsub_link = settings.base_url + user.profile.create_create_unsubscrie_link ()
html_message = html_message + "ឈប់ជាវ"
Msg = EtheryMultiactians (Mail_Subject, Strip_Tags (HTML_MESSCRCRIWIE) បឋមកថា = [to _ aftucail, '<' '}
msg_alenation (html_message, "អត្ថបទ / html")
ទម្រង់ = user.profile
សាកល្បង:
MSG.Send (បរាជ័យ = មិនពិត)
បើមិនពោះទន្លេ.email_valid:
Profire.email_valid = ពិត
ទម្រង់ ()
លើកលែងតែ:
Profire.email_valid = មិនពិត
ទម្រង់ ()នេះពិតជាស្មុគស្មាញបន្តិចហើយយើងមិនទាន់ត្រៀមខ្លួនរួចរាល់ដើម្បីដំណើរការលេខកូដទាំងអស់នេះនៅឡើយទេ។ សូមកត់សម្គាល់ថាយើងកំពុងកំណត់ការចាំបាច់ - តំណភ្ជាប់, តំណដែលអ្នកប្រើអាចប្រើដើម្បីឈប់ជាវពីអ៊ីម៉ែលរបស់យើង។ នេះគឺសំខាន់ណាស់ព្រោះអ្នកប្រើប្រាស់នឹងចាំបាច់ត្រូវដកហូតអ៊ីមែលរបស់យើងបានលុះត្រាតែពួកគេចង់ឃើញពួកគេនៅពេលណាមួយ។ យើងក៏បន្ថែមជម្រើសអត្ថបទជំនួសសាររបស់យើងដែលជាសារ HTML ដែលបានដកស្លាក HTML ។ ចុងក្រោយយើងពិនិត្យមើលថាតើអ៊ីម៉ែលដែលបានផ្ញើហើយប្រសិនបើវាមិនបានយើងសម្គាល់នៅក្នុងប្រវត្តិរបស់អ្នកប្រើប្រាស់ដែលអ៊ីមែលរបស់ពួកគេមិនត្រឹមត្រូវ។
តោះត្រឡប់ទៅគំរូអ្នកប្រើប្រាស់ដូច្នេះយើងអាចធ្វើកិច្ចការនេះទាំងអស់នេះ។ យើងត្រូវកំណត់មុខងារដើម្បីបង្កើតតំណភ្ជាប់ដើម្បីឈប់ជាវហើយកំណត់វាលប៊ូលីនដើម្បីសម្គាល់ថាអ៊ីមែលរបស់អ្នកប្រើមិនមានសុពលភាព។ # ដំបូងបន្ថែមការនាំចូលខាងក្រោមទៅកំពូលអ្នកប្រើ / ម៉ូឌែល
អ្នកប្រើប្រាស់ / ណូណូ / ម៉ូឌែល# ... ពី Django.Core.Rigting Timestampsigner នាំចូល, FADSIGREX, ហត្ថលេខា ពី Django.urls ទំនិញនាំចូល
...
បន្ទាប់មកទៀតតោះបន្ថែមមុខងារដល់អ្នកប្រើម៉ូដែលដើម្បីធ្វើឱ្យនិមិត្តសញ្ញាហើយពិនិត្យមើលថូខឹនដែលបានប្រើដើម្បីធ្វើឱ្យអ៊ីមែលសកម្មផងដែរថាតើអ្នកប្រើប្រាស់ទទួលបានសំបុត្ររបស់ពួកគេដោយជោគជ័យដែរឬទេ។ នៅក្នុងអ្នកប្រើប្រាស់ / Models.py ម្តងទៀតបន្ថែមលេខដូចខាងក្រោមដល់ចុងបញ្ចប់នៃម៉ូដែល (លេខកូដចូលបន្ទាត់)# ... Email_valid = Models.boolandfield (លំនាំដើម = ពិត) def make_token (ខ្លួនឯង): ត្រឡប់ Timestampsigner () ។ សញ្ញា (meal.user.username) Def Check_Token (ខ្លួនឯងនិមិត្តសញ្ញា): សាកល្បង: Key = '% s:% s'% (mail.user.uder.udername, និមិត្តសញ្ញា) Timestampsigner () ។ មិនត្រឹមត្រូវ (គ្រាប់ចុច, Max_age = 60 * 60 * 24 * 30) # មានសុពលភាពរយៈពេល 30 ថ្ងៃ លើកលែងតែ (Badsignature សញ្ញាហត្ថលេខា): ត្រឡប់មិនពិត ត្រឡប់ពិត def forge_unsubscribe_link (ខ្លួនឯង): ឈ្មោះអ្នកប្រើ, ថូខឹន = Meal.make_Token () ។ បំបែក (":" 1) ត្រឡប់របស់បញ្ច្រាស ('អ្នកប្រើ: ឈប់ជាវ' KWargs = {ឈ្មោះអ្នកប្រើ ': ឈ្មោះអ្នកប្រើ' ថូខឹន ': និមិត្តសញ្ញា' Token,})
...មានសុពលភាពរយៈពេល 30 ថ្ងៃ
នេះគឺសាមញ្ញណាស់យើងប្រើ Timestampsigner ដែលជាឧបករណ៍គ្រីបគ្រីបមូលដ្ឋានដើម្បីបង្កើតនិមិត្តសញ្ញាដែលនឹងផុតកំណត់បន្ទាប់ពីចំនួនពេលវេលាជាក់លាក់មួយហើយយើងក៏ប្រើមុខងារផ្សេងទៀតដើម្បីពិនិត្យមើលថាតើវាមានសុពលភាពដែរឬទេ។ យើងប្រើថូខឹនទាំងនេះពីរដងម្តងដើម្បីផ្ទៀងផ្ទាត់អ៊ីមែលហើយម្តងសម្រាប់តំណដែលឈប់ជាវ។ឥឡូវនេះយើងមានរបស់ទាំងនេះដែលជាការងារចុងក្រោយដែលយើងត្រូវធ្វើគឺមាននៅក្នុងទស្សនៈ។ នៅក្នុងអ្នកប្រើប្រាស់ / Views.py សូមបន្ថែមការមើលដើម្បីផ្ទៀងផ្ទាត់អាសយដ្ឋានអ៊ីម៉ែលនិងឈប់ជាវ។
អ្នកប្រើប្រាស់ / nano Nano / Views.pypython manage.py startapp users
ដំបូងបន្ថែមការនាំចូលខាងក្រោម។ ខ្ញុំបានបោះចោលពីរបីបន្ថែមទៀតដូច្នេះយើងនឹងមិនចាំបាច់នាំចូលរបស់របរជាច្រើនទៀតនៅពេលក្រោយទេ។ពី Django.contrib.auth នាំចូល ពី Django.shortcuts ការនាំចូលការនាំចេញ, ប្តូរទិស, ទទួលបាន et_object_or_304 ពី Django.contrib.Auth.Models នាំចូលអ្នកប្រើប្រាស់ ពី django.utils.endilding ere_String ពី Django.utils.HTTP នាំចូល Urlsafe_base64_xode, urlsafe_base64_dase64_deede នាំចូល Json សំណើរបស់ការនាំចូល នាំចូលកាលបរិច្ឆេទកាលបរិច្ឆេទ, Traceback ពី Django.Contrib នាំចូលសារនាំចូល ពីទម្រង់នៃការនាំចូល .models ពី Django.utils នាំចូល Tenzone នាំចូល ពី Django.views.decorater.Cache ការនាំចូលមិនដែល ពីការនាំចូល។ នាំចូលអ៊ីមែល ពី Django.contrib.auth.DORUTARE នាំចូល login_reque ពី Django.contrib.auth.mixins នាំចូល LogeReRieSquiredmixin, userpasestestmixin ពី Django.UdilsS.Decorator ពី Django.HTTP នាំចូល httpesponsediredirediredirediredired ពីការកំណត់នាំចូល Django.conf ពី Django.utils នាំចូល Tenzone នាំចូល នាំចូលទិន្នន័យ នាំចូល PYTZ ពី Django.views.decorator.csffrf នាំចូលស៊ីអេសអេហ្វអេហ្វអេហ្វ ពី Django.HTTP នាំចូល HTTPropse ពី Django.contrib.auth.tok.tokettion ការនាំចូលលំនាំដើម - toktoken_generator ពី Django.utils.HTTP នាំចូល Urlsafe_base64_deede6_DECode ពី .tokens account account_activation_token
ត្រូវប្រាកដថាត្រូវនាំចូលមុខងារអ៊ីម៉ែលផ្ទៀងផ្ទាត់អ្នកប្រហែលជាមានការនាំចូលមួយចំនួនរួចហើយប៉ុន្តែវាមិនឈឺចាប់ក្នុងការធ្វើម្តងទៀតទេ។ អ្នកនឹងត្រូវនាំចូលមុខងារផ្ញើអ៊ីមែលដែលបានផ្ទៀងផ្ទាត់ក៏ដូចជាគណនេយ្យ - ក្នុងការគណនេយ្យ - Tokok_token ពីអ្នកប្រើប្រាស់។ ក្នុងចំនោមការនាំចូលផ្សេងទៀត។
ឥឡូវនេះនៅផ្នែកខាងក្រោមនៃឯកសារបន្ថែមលេខកូដខាងក្រោម:Def ឈប់ជាវ (សំណើរឈ្មោះអ្នកប្រើសញ្ញានិមិត្តសញ្ញា): អ្នកប្រើប្រាស់ = Get_object_or_404 (អ្នកប្រើប្រាស់ឈ្មោះអ្នកប្រើ = ឈ្មោះអ្នកប្រើ) ប្រសិនបើ ((use.user.is_authenticated និង infion.user == អ្នកប្រើ) ឬ user.profile.check_tok_token (និមិត្តសញ្ញា): # ឈប់ជាវពួកគេ ទម្រង់ = user.profile profile.subscribed = មិនពិត ទម្រង់ () ត្រឡប់ការបង្ហាញ (សំណើរ 'អ្នកប្រើប្រាស់ / Unsubscribe.html') # បើមិនដូច្នេះទេប្តូរទិសទៅទំព័រចូល សារលិខិតសារលិខិតបានផុតកំណត់ហើយ។ សូមភ្ជាប់មកហើយ។ សូមចូលទៅការឈប់ជាវ។ ') Next_url = បញ្ច្រាស ('អ្នកប្រើ: Unsubscrcrib', kwargs = {ឈ្មោះអ្នកប្រើ ': ឈ្មោះអ្នកប្រើ,' និមិត្តសញ្ញា ': និមិត្តសញ្ញា}) ត្រឡប់ httpenponseredireed ('% s? បន្ទាប់ =% s'% (បញ្ច្រាស (កំពុងចូល), បន្ទាប់ - បន្ទាប់)) Def ធ្វើឱ្យសកម្ម (សំណើ, UIDB64, Token): សាកល្បង: UID = force_stral (urlsafe_base64_decode (UIDB64) អ្នកប្រើប្រាស់ = user.objects.get (PK = UID) លើកលែងតែ (FateError, TodyError, Overformerror, user.doesnotexist): អ្នកប្រើប្រាស់ = គ្មាន IP = get_client_ip (ស្នើសុំ) ប្រសិនបើអ្នកប្រើមិនមាននិងគណនេយ្យ _ASTIVATION_TOKEN.CHECK_TOKET (អ្នកប្រើប្រាស់ Token): user.profile.email_verified = ពិត user.profile.save () user.save () # Sendwel ទទួលបាន (ស្នើសុំ, អ្នកប្រើប្រាស់) សារ .scess (សំណើរសុំសម្រាប់ការបញ្ជាក់អ៊ីមែលរបស់អ្នកឥឡូវនេះអ្នកអាចចូលទៅក្នុងគណនីរបស់អ្នកហើយអ៊ីមែលស្វាគមន៍ត្រូវបានផ្ញើទៅអ្នក។ ') ការប្តូរទិសត្រឡប់ (user.profile.create_url_forl_url () ផ្សេងទៀត: សារ .scess (សំណើរសូមចូលដោយប្រើតំណធ្វើឱ្យសកម្ម F'YOUR បានផុតកំណត់ហើយ។ សូមស្នើសុំតំណធ្វើឱ្យសកម្មថ្មី។ ') ការប្តូរទិសត្រឡប់ ('ផ្ទៀងផ្ទាត់: ផ្ទៀងផ្ទាត់') Ref Rewed_activation (សំណើរ): ប្រសិនបើសំណើ .method == 'ប្រកាស': Form = ReubenDativationEmailfilation (onse.post) អ៊ីម៉ែល = infere.post ['អ៊ីមែល'] សាកល្បង: អ្នកប្រើប្រាស់ = user.objects.get (អ៊ីម៉ែល = អ៊ីមែល) ផ្ញើ - អ្នកប្រើ (អ្នកប្រើប្រាស់) សាររបស់អ្នកបានផ្ញើសាររបស់អ្នក។ សូមចុចលើតំណភ្ជាប់នៅក្នុងអ៊ីម៉ែលរបស់អ្នកដើម្បីផ្ទៀងផ្ទាត់គណនីរបស់អ្នក។ ') ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('ផ្ទៀងផ្ទាត់: ផ្ទៀងផ្ទាត់')) លើកលែងតែ: សារ ផ្សេងទៀត: ទម្រង់ = resendactivationemailfilfilform () ត្រឡប់ការបង្ហាញ (សំណើរ 'អ្នកប្រើប្រាស់ / Resen_activation.HTML' {'ទម្រង់បែបបទ': ទម្រង់បែបបទ 'ចំណងជើង': 'ការធ្វើឱ្យសកម្ម' តូច ': ពិត})
ឈប់ជាចម្លងពួកគេ username = request.POST['username'] # បើមិនដូច្នេះទេប្តូរទិសទៅទំព័រចូល
password = request.POST['password'] # Sradwel ទទួលបាន (សំណើ, អ្នកប្រើប្រាស់)
នេះគឺជាលេខកូដជាច្រើន។ សូមបំបែកវាចុះ។ មុខងារដំបូងសម្អាតនិងសាមញ្ញ, ឈប់ជាវអ្នកប្រើពីបញ្ជីសំបុត្រ។ មុខងារទី 2 ធ្វើឱ្យអ៊ីមែលរបស់ពួកគេសកម្មហើយអ្នកនឹងកត់សំគាល់ថាខ្ញុំបានបន្ថែមមុខងារអត្ថាធិប្បាយថា Sendwel ទទួលបាន។ អ្នកត្រូវបានស្វាគមន៍ក្នុងការប្រើអ៊ីម៉ែលគំរូនិងនិយមន័យមុខងារដើម្បីផ្ញើអ៊ីមែលស្វាគមន៍ខ្ញុំមិនទាន់មិនទាន់មាននៅឡើយទេ។ មុខងារចុងក្រោយដែលខ្ញុំបានបោះគឺសំខាន់ណាស់ព្រោះអ៊ីមែលធ្វើឱ្យសកម្មផុតកំណត់។ ដូច្នេះយើងនឹងត្រូវផ្ញើអ៊ីមែលឱ្យសកម្មឡើងវិញនៅពេលនោះ។ យើងអាចប្រើទម្រង់មូលដ្ឋានសម្រាប់នេះហើយហៅមុខងារដើម្បីផ្ញើអ៊ីមែលផ្ទៀងផ្ទាត់។ មុនពេលដែលយើងធ្វើបែបនេះសូមប្រាកដថាវាត្រូវបានផ្ញើនៅកន្លែងដំបូងដោយបន្ថែមមុខងារហៅទៅទិដ្ឋភាពចុះឈ្មោះ។ បន្ថែមបន្ទាត់នេះមុនពេលប្តូរទិសក្នុងទិដ្ឋភាពចុះឈ្មោះ, ចុះឈ្មោះ, ចុះឈ្មោះនៅក្នុងអ្នកប្រើប្រាស់ / មើល។អ្នកប្រើប្រាស់ / nano Nano / Views.py
# ... (បន្ទាប់ពី) ចុះឈ្មោះ (សំណើ): ផ្ញើ - អ្នកប្រើ (អ្នកប្រើប្រាស់) # ... (មុន) ប្តូរទិស (mkdir users/templates
mkdir users/templates/users
... (បន្ទាប់ពី) ref rest ចុះឈ្មោះ (សំណើរ):... (មុន) ប្តូរទិស (
អ្នកមិនចាំបាច់បន្ថែមបន្ទាត់ទីមួយនិងចុងក្រោយនៅក្នុងអត្ថបទខ្លីអត្ថបទនោះទេគ្រាន់តែត្រូវប្រាកដថាទិដ្ឋភាពចុះឈ្មោះផ្ញើអ៊ីមែលផ្ទៀងផ្ទាត់ទៅអ្នកប្រើ។ វាគួរតែមើលទៅដូចនេះ:nano users/templates/users/login.html
# ... ការនាំចូល
ពី .forms នាំចូល UserregisterRiegisterform
ចុះឈ្មោះ (ការស្នើសុំ):
ប្រសិនបើសំណើ .method == "ប្រកាស":
ទម្រង់ = USerregisterform (use.post)
ប្រសិនបើ Form.is_valid ():
អ្នកប្រើប្រាស់ = Form.Save ()
ផ្ញើ _verication_email (អ្នកប្រើ) # ត្រូវប្រាកដថាបន្ថែមបន្ទាត់នេះ!
សារ .scess (សំណើរសុំសូមស្វាគមន៍ចំពោះកម្មវិធី {} ។ '។ ទ្រង់ទ្រាយ (user.username))
ត្រឡប់ការបង្ហាញ (សំណើរ 'អ្នកប្រើប្រាស់ / ចុះឈ្មោះ.html', {'ទម្រង់បែបបទ': userregisterform})... ការនាំចូល
ត្រូវប្រាកដថាបន្ថែមបន្ទាត់នេះ!
ឥឡូវនេះយើងចាំបាច់ត្រូវបន្ថែមទម្រង់មួយដើម្បីផ្ញើអ៊ីមែលសកម្មឡើងវិញ។ នៅក្នុងអ្នកប្រើប្រាស់ / Forms.py បន្ថែមទំរង់ដូចខាងក្រោម:# ... (ការនាំចូល) ការបញ្ចូលឡើងវិញថ្នាក់រៀនថ្នាក់ (Forms.Form): អ៊ីម៉ែល = Forms.emailfield (ត្រូវការ = ពិត)
... (ការនាំចូល)
យើងក៏នឹងត្រូវការគំរូដែលត្រូវគ្នានឹងទម្រង់បែបបទធ្វើឱ្យសកម្មអ៊ីម៉ែលនេះឡើងវិញផងដែរ។ តោះបន្ថែមគំរូនេះចូល។ កែសម្រួលឯកសារ:Nano អ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / Rew Res_activation.html
បន្ទាប់បន្ថែមលេខកូដខាងក្រោមទៅឯកសារ។from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
{% ពង្រីក 'basic.html'%}
{% dincess មាតិកា%}
{% ផ្ទុក crispy_forms_tags%}
{% csrf_token%}
ផ្ញើសារឡើងវិញអ៊ីមែល
{{Form | Crispy}}
ផ្ញើសារឡើងវិញអ៊ីមែល
{% endblock%}Whew, នោះគឺច្រើនណាស់! ឥឡូវនេះនៅពេលដែលយើងដាក់ពង្រាយលេខកូដទៅម៉ាស៊ីនមេរបស់យើងយើងនឹងអាចផ្ញើអ៊ីមែល HTML ហើយធ្វើឱ្យគណនីអ្នកប្រើសកម្មដោយចុចក្នុងអ៊ីមែល។ យើងក៏ប្រហែលជាចង់ផ្ញើអ៊ីម៉ែលស្វាគមន៍យ៉ាងសាមញ្ញដូច្នេះសូមមើលពីរបៀបធ្វើវា។ បន្ថែមអ្នកប្រើប្រាស់ / email.py បន្ថែមលេខកូដខាងក្រោម:
Def Sendwel20 ទទួលបាន (អ្នកប្រើប្រាស់): អ្នកប្រើប្រាស់ = Get_user_Model () HTML = បើក ('{} / អ្នកប្រើ / ស្វាគមន៍ -emepail.html'.format (setting.base_dir))) អាន () មុខវិជ្ជា = 'សូមស្វាគមន៍ចំពោះ' + settings.site_name + ', {{{erver {ឈ្មោះអ្នកប្រើ}}!' ទំព័រគំរូ = គំរូ (HTML) subjtemplate = គំរូ (ប្រធានបទ) បរិបទ = បរិបទ ('ឈ្មោះអ្នកប្រើ': user.username 'base_url': settings.base_url, 'mode_name': 'daisy hits.name': settings.site_name}) បង្ហាញ RectEtTtemplate = Template.Render (បរិបទ) បរិបទ Subjcontext = បរិបទ ({'ឈ្មោះអ្នកប្រើ': user.udsername}) SubjRenderedtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtTtT.Memplate.Render (subjcontext) SEND_HTML_EMAIL (អ្នកប្រើប្រាស់ពាក្យ SubjRenderedTtTtTtTtTtTtate, បង្ហាញedTtTtTtTemplate)យើងក៏ត្រូវការពុម្ពដើម្បីផ្តល់ព័ត៌មានទាំងអស់នេះដែរ។ នៅលើគេហទំព័ររបស់ខ្ញុំគំរូមើលទៅដូចខាងក្រោមប៉ុន្តែអ្នកត្រូវបានស្វាគមន៍ក្នុងការធ្វើទ្រង់ទ្រាយវាទោះយ៉ាងណាអ្នកចូលចិត្ត។
សូមស្វាគមន៍មកកាន់ {{tite_name}} សួស្តី {{ឈ្មោះអ្នកប្រើ}} យើងរីករាយដែលបានជួបអ្នកនៅទីនេះ! សូមអរគុណដែលបានចូលរួម {{TiteT_Name}}} ហើយក្នុងនាមជាផ្នែកមួយនៃភាពសប្បាយរីករាយ។ ដើម្បីចាប់ផ្តើមនេះគឺជារឿងមួយចំនួនដែលអ្នកអាចធ្វើបានបន្ទាប់ពីអ្នកផ្ទៀងផ្ទាត់អត្តសញ្ញាណរបស់អ្នក។ ប្រើកម្មវិធី។ នេះគឺជាទំព័រសំខាន់នៃ {{TiteT_Name}} ទស្សនាប្រវត្តិរូបឯកជនរបស់ខ្ញុំ {{តំបន់T_NAME} របស់ខ្ញុំ។ នេះគឺជាទំព័រសម្រាប់អ្នកណាម្នាក់ដែលចង់ស្គាល់ខ្ញុំ។ ទម្រង់ច្រើនទៀត។ អ្នកអាចរកឃើញមនុស្សទាំងនេះនៅលើគេហទំព័រហើយមើលមាតិការបស់ពួកគេ។ មើលប្រកាសទាំងអស់នៅទីនេះ។ នេះគឺជាទំព័រមុខឯកជននៃ {{titeT_name}} ។ មានថែមទៀតនៅលើគេហទំព័រដូច្នេះមានអារម្មណ៍ថាមានសេរីភាពក្នុងការទស្សនានិងមើលអ្វីដែលអ្នករកឃើញ។ អ្នកអាចចែករំលែកគេហទំព័រជាមួយប៊ូតុងសង្គមណាមួយនៅលើទំព័រនីមួយៗ។ ខ្ញុំសង្ឃឹមថាអ្នករីករាយនឹងពេលវេលារបស់អ្នកជាមួយ {{TiteT_Name}}}}! សូមអរគុណសម្រាប់ការនៅទីនេះ។ ដោយមានស្នេហាច្រើន {{model_name}} {{base_url}}# ចំណាំថាយើងមិនមានរាងកាយបិទរាងកាយឬ HTML ទេពីព្រោះយើងបន្ថែមវានៅពេលដែលយើងបន្ថែមតំណ HTML ឈប់។ ទាំងនេះគឺសំខាន់ណាស់ប៉ុន្តែយើងមិនចង់កំណត់ពួកគេពីរដងទេ។
ដូច្នេះតើមានអ្វីបន្ទាប់? យើងមានផ្លូវវែងឆ្ងាយហើយ។ តាមពិតយើងគួរតែត្រៀមខ្លួនរួចរាល់ហើយក្នុងការដាក់ពង្រាយគេហទំព័រទៅឱ្យម៉ាស៊ីនមេ។ យើងអាចបន្ថែមអ្នករចនា @login_requize និងធ្វើឱ្យទស្សនៈរបស់យើងមានសុវត្ថិភាព, យកការចុះឈ្មោះរបស់អ្នកប្រើប្រាស់ផ្ញើអ៊ីមែលដែលគោរពនិងព័ត៌មានឃ្លាំងសម្ងាត់ដែលជាមូលដ្ឋាននៃគេហទំព័រដែលត្រូវធ្វើដើម្បីឱ្យមានទំនាក់ទំនង។ យើងនឹងបន្ថែមលក្ខណៈពិសេសមានប្រយោជន៍បន្ថែមទៀតហើយបន្ទាប់មកបង្កើតមូលដ្ឋានសម្រាប់ការដាក់លេខកូដរបស់យើងទៅម៉ាស៊ីនមេពីចម្ងាយបង្កើតម៉ាស៊ីនបម្រើសំបុត្រការកំណត់រចនាសម្ព័ន្ធដែននិងតម្រងដើម្បីធ្វើឱ្យគេហទំព័ររបស់យើងមានសុវត្ថិភាពនិងសមរម្យ។យើងក៏ត្រូវការទិដ្ឋភាពកំណត់លេខសំងាត់ឡើងវិញដែរដូច្នេះសូមបន្ថែមវាក្នុងល្បឿនលឿន។ ឈ្មោះរបស់ Django ក្នុងទិដ្ឋភាពកំណត់លេខសំងាត់ឡើងវិញត្រូវបានខូចក្នុងមុខងារមួយចំនួនប៉ុន្តែយើងនឹងពិនិត្យមើលរបៀបសរសេរទស្សនៈផ្ទាល់ខ្លួនរបស់យើងទំព័រអ៊ីម៉ែលអ៊ីម៉ែលនិងលំនាំ URL ។ នេះជាអ្វីដែលទិដ្ឋភាពមើលទៅដូចអ្នកប្រើប្រាស់ / មើល .py
# ... ការនាំចូល ពី Django.contrib.auth.tok.tokettion ការនាំចូលលំនាំដើម - toktoken_generator ពី Django.contrib.auth.Forms នាំចូល TespetPordace ពី Django.utils.HTTP នាំចូល Urlsafe_base64_deede6_DECode def ពាក្យសម្ងាត់ _Reset (សំណើរ, UIDB64, Token): អ្នកប្រើប្រាស់ = Get_object_or_404 (អ្នកប្រើប្រាស់លេខសម្គាល់ = urlsafe_base64_decode (UIDB64) ប្រសិនបើសំណើ .method == 'ប្រកាស': Form = SetPasswordform ទ្រង់ទ្រាយ (អ្នកប្រើប្រាស់, open.post) ប្រសិនបើ Form.is_valid () និង Default_Token_generator.check_Tok_Token (អ្នកប្រើប្រាស់, និមិត្តសញ្ញា): Form.Save () សារ .scess (សំណើ 'ពាក្យសម្ងាត់របស់អ្នកត្រូវបានកំណត់ឡើងវិញហើយ។ ') elif មិន form.is_valid (): សារ។ ពាក្យសំងាត់របស់អ្នកមិនត្រូវគ្នាឬមិនបំពេញតាមតម្រូវការ។ សូមព្យាយាមម្តងទៀត។ ') ប្តូរទិសត្រឡប់ (សំណើរសុំ) ផ្សេងទៀត: សាររបស់អ្នកបានផុតកំណត់សាររបស់អ្នក។ តំណភ្ជាប់លេខសំងាត់របស់អ្នកបានផុតកំណត់ហើយ។ សូមបង្កើតថ្មីមួយ។ ') ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('អ្នកប្រើប្រាស់: ចូល')) ត្រឡប់ការបង្ហាញ (សំណើរ, 'អ្នកប្រើ / ពាក្យសម្ងាត់ _Reset_confirm.html' { 'ចំណងជើង': 'កំណត់លេខសម្ងាត់របស់អ្នកឡើងវិញ' 'ទម្រង់បែបបទ': SetPasswordform ទ្រង់ទ្រាយ (អ្នកប្រើប្រាស់)from django.db import models # ... ការនាំចូល
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # សំណុំបែបបទនេះត្រូវបានបង្កើតឡើងទៅ Django, ប៉ុន្តែយើងនឹងត្រូវការគំរូមួយដើម្បីបញ្ជាក់ការកំណត់លេខសំងាត់អ្នកប្រើប្រាស់ / ពុម្ព / Advase_reset_ctml.html
{% ពង្រីក 'basic.html'%}
{% ផ្ទុក crispy_forms_tags%}
{% dincess មាតិកា%}
{% csrf_token%}
កំណត់ពាក្យសម្ងាត់ឡើងវិញ
{{Form | Crispy}}
កំណត់ពាក្យសម្ងាត់ឡើងវិញ
{% endlock មាតិកា%}យើងក៏មានគំរូមួយផងដែរដើម្បីផ្ញើអ៊ីមែលកំណត់លេខសំងាត់ឡើងវិញដោយមានទំរង់សាមញ្ញក្នុងអ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / លេខសំងាត់ / លេខសម្ងាត់ _RESET.HTML
{% ពង្រីក 'basic.html'%} {% ផ្ទុក crispy_forms_tags%} {% dincess មាតិកា%} {% csrf_token%} កំណត់ពាក្យសម្ងាត់ឡើងវិញ {{Form | Crispy}} ស្នើសុំការកំណត់ពាក្យសម្ងាត់ឡើងវិញ {% endlock មាតិកា%}គំរូសម្រាប់អ៊ីម៉ែលខ្លួនវាគឺសាមញ្ញវាគឺជាឯកសារ HTML មូលដ្ឋានដែលបង្ហាញពាក្យសម្ងាត់កំណត់ពាក្យសម្ងាត់ឡើងវិញនៅក្នុងអ្នកប្រើប្រាស់ / អ្នកប្រើ / លេខសម្ងាត់ / លេខសំងាត់។ Django នឹងបកស្រាយឯកសារនេះដោយស្វ័យប្រវត្តិ។
uglek - កំណត់ពាក្យសម្ងាត់របស់អ្នកឡើងវិញ ជំរាបសួរ, ដើម្បីកំណត់ពាក្យសម្ងាត់របស់អ្នកឡើងវិញសូមចុចត្រង់នេះ។ ម៉្យាងវិញទៀតអ្នកអាចបិទភ្ជាប់តំណភ្ជាប់ខាងក្រោមទៅក្នុងកម្មវិធីរុករករបស់អ្នក: https://uglek.com {% url 'password_reset_confirm' uidb64 = uid token = ថូខឹន%} ប្រសិនបើអ្នកមិនបានស្នើសុំការកំណត់លេខសំងាត់ឡើងវិញទេអ្នកអាចមិនអើពើនឹងអ៊ីមែលនេះ។ សូមអរគុណដែលបានចូលរួមជាមួយយើង, រនាក់from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, related_name='profile')
account_created = models.DateTimeField(default=timezone.now)
last_seen = models.DateTimeField(default=timezone.now)
can_login = models.DateTimeField(default=timezone.now)
preferred_name = models.CharField(max_length=20,default='', null=True, blank=True)
bio = models.TextField(blank=True, default='')
យើងក៏ត្រូវការគំរូពីរទៀតដែរ។ ទីមួយគឺត្រូវបញ្ជាក់ថាអ៊ីមែលត្រូវបានផ្ញើ។ ការមើលសម្រាប់របស់ទាំងនេះមានរួចហើយនៅក្នុង Django ដូច្នេះយើងគ្រាន់តែត្រូវការដោះស្រាយវានៅក្នុង urls.py ។ គំរូនេះមានទីតាំងនៅអ្នកប្រើ / ពុម្ព / អ្នកប្រើប្រាស់ / លេខសំងាត់ _RESET_DONE.HTML{% ពង្រីក 'basic.html'%} {% dincess មាតិកា%} អ៊ីមែលមួយត្រូវបានផ្ញើដោយមានការណែនាំដើម្បីកំណត់ពាក្យសម្ងាត់របស់អ្នកឡើងវិញ។ {% endlock មាតិកា%}
ហើយចុងក្រោយដើម្បីបញ្ជាក់ថាការកំណត់លេខសំងាត់ឡើងវិញបានបញ្ចប់អ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / លេខសំងាត់{% ពង្រីក 'basic.html'%} {% dincess មាតិកា%} ពាក្យសម្ងាត់របស់អ្នកត្រូវបានកំណត់។ ចូលនៅទីនេះ {% endlock មាតិកា%}
ឥឡូវនេះយើងត្រូវការលំនាំ URL សម្រាប់ទស្សនៈទាំងនេះ។ នៅក្នុងអ្នកប្រើប្រាស់ / urls.py បន្ថែមលំនាំ URL ខាងក្រោម:# urlpatterns = [
# ... URL ពីមុននៅទីនេះ
ផ្លូវ ('ពាក្យសម្ងាត់ - កំណត់ឡើងវិញ /',
auth_views.passwordresetview.as_view (
template_name = 'អ្នកប្រើ / ពាក្យសម្ងាត់ _RESET.HTML'
html_email_template_name = 'អ្នកប្រើ / លេខសំងាត់ _RESET_HTML_EMALE.HTML'
),
ឈ្មោះ = 'password_reset'),
ផ្លូវ ('ពាក្យសម្ងាត់ - កំណត់ឡើងវិញ / ធ្វើ /',
auth_views.passwordresetdoneview.as_view (
template_name = 'អ្នកប្រើ / ពាក្យសម្ងាត់ _RESET_DONE.HTML'
),
ឈ្មោះ = 'password_reset_done'),
ផ្លូវ ('ពាក្យសម្ងាត់ - កំណត់ឡើងវិញ - បញ្ជាក់ ///',
Auth_Views.passWORDREDRESETVIVE.AS_VIVE (
Template_name = 'អ្នកប្រើ / លេខសំងាត់ _RESET_CONSL'
),
ឈ្មោះ = 'password_reset_confirm'),
ផ្លូវ ('ពាក្យសម្ងាត់ - កំណត់ឡើងវិញ - ពេញលេញ /',
auth_views.passwordreseteetcompiewiew.as_view (
template_name = 'អ្នកប្រើ / លេខសម្ងាត់_RESET_CHOME.HTML'
),
ឈ្មោះ = 'password_reset_accompleete'),
តមយយរសយល
Profile.objects.create(user=user) # ... URLs មុននៅទីនេះ
គំរូចំនួនបួនគឺច្រើនណាស់! ប៉ុន្តែឥឡូវនេះយើងអាចប្រាកដថាអាចកំណត់ពាក្យសម្ងាត់របស់អ្នកប្រើឡើងវិញបានគ្រប់ពេលដែលយើងត្រូវការទាំងអស់ពីកម្មវិធីអ៊ីនធឺណិត។ខ្ញុំយល់ថានេះគឺជាលេខកូដជាច្រើន។ ប្រសិនបើវាហាក់ដូចជានៅលើក្បាលរបស់អ្នកបន្តិចនោះមិនអីទេ។ អ្នកនឹងមានភាពប្រសើរឡើងការយល់ដឹងរបស់អ្នកនឹងប្រសើរឡើងហើយអ្នកនឹងកាន់តែមានសមត្ថភាពខ្ពស់ជាមួយនឹងលេខកូដឆាប់ៗនេះ។ ប្រសិនបើអ្នកបានបាត់បង់ទាំងស្រុងខ្ញុំសូមផ្តល់អនុសាសន៍ឱ្យត្រលប់មកកម្មវិធីនេះវិញនៅពេលក្រោយបន្ទាប់ពីធ្វើការលើការរៀនដោយខ្លួនឯងដើម្បីសរសេរកូដវគ្គសិក្សាតាមអ៊ិនធរណេត។ ទាំងនេះជាធម្មតាមានសេរីភាពក្នុងការចាប់ផ្តើមហើយនឹងណែនាំអ្នកតាមរយៈអ្វីគ្រប់យ៉ាងដែលអ្នកត្រូវការដើម្បីទទួលបានជោគជ័យនៅពេលអ្នកត្រលប់មកគម្រោងនេះវិញ។ ប្រសិនបើអ្នកមានអារម្មណ៍ថាអ្នកបានត្រៀមខ្លួនជាស្រេចដើម្បីបន្តអានបន្តទៀតយើងនឹងគ្របដណ្តប់លើការដាក់ពង្រាយលេខកូដរបស់អ្នកទៅម៉ាស៊ីនមេពីចម្ងាយហើយរៀបចំម៉ាស៊ីនមេរបស់អ្នកផងដែរដោយស្វ័យប្រវត្ដិដោយប្រើគម្រោងថ្មីដោយប្រើពាក្យបញ្ជាសាមញ្ញមួយចំនួន។
រឿងចុងក្រោយដែលយើងត្រូវធ្វើមុនពេលដាក់ពង្រាយម៉ាស៊ីនមេពីចម្ងាយគឺធ្វើឱ្យគេហទំព័ររបស់យើងមានសុវត្ថិភាពជាងបន្តិច។ អ្នកនឹងសម្គាល់ឃើញថាការចូលបានគ្រាន់តែយកឈ្មោះអ្នកប្រើនិងពាក្យសម្ងាត់ហើយមិនមានការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវច្រើនឬលេខកូដពេលវេលាមួយទេ។ នេះគឺជាការជួសជុលងាយស្រួលហើយមានលេខកូដដូចគ្នាយើងអាចធ្វើឱ្យគេហទំព័ររបស់យើងផ្ញើសារហើយថែមទាំងត្រូវបានឆ្លើយតបទៅសារអត្ថបទដែលបានផ្ញើទៅម៉ាស៊ីនមេផងដែរ។ ដើម្បីចាប់ផ្តើមយើងនឹងត្រលប់ចូលទៅក្នុងម៉ូដែលអ្នកប្រើហើយបន្ថែមសញ្ញាធីមធ័រស្រែដែលនឹងតំណាងឱ្យការចូលនីមួយៗ។ យើងក៏នឹងបន្ថែមគ្រឿងសម្គាល់ដែលបង្វិលដែលមានលក្ខណៈពិសេសមួយដល់ម៉ូដែលអ្នកប្រើដែលនឹងត្រូវបានប្រើដើម្បីបន្ថែមសុវត្ថិភាពបន្ថែមទៅការចូលរបស់យើង។ ការកែសម្រួលម៉ូដែលអ្នកប្រើប្រាស់អ្នកប្រើប្រាស់ / ម៉ូឌែលបន្ថែមទៀតបន្ថែមលេខដូចខាងក្រោមៈ# ពីម៉ូឌែលនាំចូល Django.dB
ពី Django.contrib.Auth.Models នាំចូលអ្នកប្រើប្រាស់
ពី Django.utils នាំចូល Tenzone នាំចូល
# ត្រូវប្រាកដថាបាននាំចូល UUID, Timestamp ចុះឈ្មោះអ្នកចុះឈ្មោះនិងម៉ាស៊ីនភ្លើង URL (បញ្ច្រាស)
នាំចូល UUID
ពី Django.Core.Rigting Timestampsigner នាំចូល, FADSIGREX, ហត្ថលេខា
ពី Django.urls ទំនិញនាំចូល
ប្រវត្តិរូបថ្នាក់ (ម៉ូដែល .model):
អ្នកប្រើ = Models.onetoonefield (អ្នកប្រើប្រាស់, នៅលើ on_delete = models.casse, null = ពិត, ទទេ = ពិត, ដែលទាក់ទងនឹងឈ្មោះក្លែងក្លាយ = 'ប្រវត្តិរូប')
គណនេយ្យ _created = Models.Datetimefield (លំនាំដើម = Timezone.Now)
ចុងក្រោយ = Models.Datetimefield (លំនាំដើម = Timezone.Now)
Can_login = Models.Datetimefield (លំនាំដើម = Timezone.Now)
refutiname = models.Charfield (ប្រវែងអតិបរមា = 20 លំនាំដើម = '', '' NULL = ពិត, ទទេ = ពិត)
ជីវ = Models.textfield (ទទេ = ពិតលំនាំដើម = '')
# បន្ថែមលេខកូដនេះនៅទីនេះ
uid = models.charfield (ប្រវែងអតិបរមា = 32 លំនាំដើម = uuid.uuid4, null = ពិត, ទទេ = ពិត)
mfa_enabled = models.boleandfield (លំនាំដើម = មិនពិត)
enable_mfa = models.boleandfield (លំនាំដើម = មិនពិត)
ទូរស័ព្ទ = Models.Charfield (លំនាំដើម = '', NULL = ពិតទទេ = ពិត, អតិបរមា
verification_code = models.Charfield (លំនាំដើម = '', NULL = TRUE, ទទេ = ពិត, Max_l_Lwog = 15)
verification_code_leng ប្រវែង = Models.integerfield (លំនាំដើម = 6)
mfa_code_expires = models.datetimefield (លំនាំដើម = Timezone.Now)
Mfa_attempts = Models.integerfield (លំនាំដើម = 0)
def pror_auth_token (ខ្លួនឯង):
ត្រឡប់ Timestampsigner () ។ សញ្ញា (meal.uid)
# ហើយបន្ថែមមុខងារនេះ
def create_auth_url (ខ្លួនឯង):
ឈ្មោះអ្នកប្រើ, ថូខឹន = Meal.Make_auth_Token () ។ បំបែក (":" 1)
ត្រឡប់របស់បញ្ច្រាស ('អ្នកប្រើប្រាស់: MFA', kwargs = {ឈ្មោះអ្នកប្រើ ": ឈ្មោះអ្នកប្រើ, 'និមិត្តសញ្ញា': និមិត្តសញ្ញា 'និមិត្តសញ្ញា})
Def Check_Auth_Token (ខ្លួនឯងនិមិត្តសញ្ញា):
សាកល្បង:
key = '% s:% s'% (mail.uid, និមិត្តសញ្ញា)
Timestampsigner () ។ មិនចុះសម្រុង (គ្រាប់ចុច, អតិបរមា = 60 * setting.valid_minute) # មានសុពលភាពសម្រាប់ 3 នាទី
លើកលែងតែ (Badsignature សញ្ញាហត្ថលេខា):
ត្រឡប់មិនពិត
ត្រឡប់ពិត
if user and user.profile.can_login < timezone.now(): # ត្រូវប្រាកដថានាំចូល UUID, Timestamp ចុះឈ្មោះនិងម៉ាស៊ីនភ្លើង URL (បញ្ច្រាស)
else: # បន្ថែមលេខកូដនេះនៅទីនេះ
user = User.objects.filter(username=username).first() # ហើយបន្ថែមមុខងារនេះ
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # មានសុពលភាពរយៈពេល 3 នាទី
ត្រូវប្រាកដថាអ្នកប្រើប្រាស់ / ម៉ូឌែលរបស់អ្នកមើលទៅដូចនេះក្រៅពីមតិយោបល់ (លេខកូដនៅលើបន្ទាត់ដែលមាន #) ។ បំបែកនេះវាសាមញ្ញណាស់។ យើងមានការនាំចូលពេលវេលាមួយចំនួនដែលជាឧបករណ៍ប្រើប្រាស់គ្រីបដែលអាចបង្កើតកូដសុវត្ថិភាពហើយផ្ទៀងផ្ទាត់វាឱ្យបានត្រឹមត្រូវដើម្បីប្រាកដថាវាមានសុពលភាពត្រូវបានប្រើតែម្ដងប៉ុណ្ណោះ។ យើងក៏ប្រើ Uuid ដែលជាអ្នកកំណត់អត្តសញ្ញាណពិសេសមួយដែលកំណត់អ្នកប្រើប្រាស់របស់យើងក្នុងការចុះហត្ថលេខាលើនិមិត្តសញ្ញាហើយនៅក្នុង URL ដែលនិមិត្តសញ្ញាត្រូវបានផ្ញើទៅអ្នកប្រើប្រាស់។ យើងនឹងប្រើគ្រីបគ្រីបមូលដ្ឋាននេះដើម្បីបង្កើតទស្សនៈត្រឹមត្រូវពីរកត្តាមួយ។ មុនពេលដែលយើងធ្វើអ្វីផ្សេងទៀតសូមដំណើរការការធ្វើចំណាកស្រុកដូច្នេះម៉ូដែលអ្នកប្រើរបស់យើងត្រូវបានធ្វើបច្ចុប្បន្នភាព។ នៅក្នុងថតឯកសារដែលមានការគ្រប់គ្រងពាក្យបញ្ជាខាងក្រោមដើម្បីបង្កើតនិងបញ្ចប់ការធ្វើចំណាកស្រុក។ប្រភព Venv / bin / Active Matematigrages គ្រប់គ្រងពស់ថ្លះនិង & គ្រប់គ្រងការធ្វើចំណាកស្រុក
នេះគឺសំខាន់ណាស់ព្រោះរាល់ពេលដែលយើងធ្វើការផ្លាស់ប្តូរគំរូយើងត្រូវបង្កើតតារាងហើយធ្វើបច្ចុប្បន្នភាពមូលដ្ឋានទិន្នន័យដែលមានលំនាំដើមមុនពេលដែលយើងអាចប្រើម៉ូដែល។បន្ទាប់សូមស្វាគមន៍ការចូលមើលការចូលរបស់យើងដើម្បីប្តូរទិសទៅទិដ្ឋភាពផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវបន្ទាប់បន្សំ។ នៅក្នុងអ្នកប្រើប្រាស់ / មើល .py ចេញអនុគមន៍ចូលហើយបញ្ជូនបន្តទៅ URL ដែលយើងទើបតែបានបង្កើតនៅក្នុងម៉ូដែលអ្នកប្រើ។
# ... ការនាំចូល Def ចូល (ការស្នើសុំ): ប្រសិនបើសំណើ .method == "ប្រកាស": ឈ្មោះអ្នកប្រើ = ense.post ['ឈ្មោះអ្នកប្រើ] លេខសម្ងាត់ = onst.post ['ពាក្យសម្ងាត់'] អ្នកប្រើ = ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ (ឈ្មោះអ្នកប្រើ = ឈ្មោះអ្នកប្រើពាក្យសម្ងាត់ = ពាក្យសម្ងាត់) ប្រសិនបើអ្នកប្រើប្រាស់និង user.profile.can_login <Timzhone.Now (): #): # ចំណាំថាឥឡូវនេះយើងកត់សម្គាល់ថាឥឡូវនេះយើងពិនិត្យមើលថាតើអ្នកប្រើអាចចូលបានទេ # យកមុខងារ auth_login ដែលមាននៅទីនេះ សារ .scess (សំណើរ 'ពាក្យសម្ងាត់របស់អ្នកត្រូវបានទទួលយក។ សូមបន្ត។ ') ប្រសិនបើ user.profile.mfa_enabled: ប្តូរទិសត្រឡប់ (user.profile.create_aute_authe_authe_url ()) # ចំណាំយើងប្តូរទិសទៅ URL ថ្មីនៅទីនេះ ផ្សេងទៀត: # ប្រសិនបើអ្នកប្រើប្រាស់មិនប្រើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ Mutli-កត្តាគ្រាន់តែចូលពួកគេ។ Auth_login (សំណើ, អ្នកប្រើ backend = 'django.contrib.auth.Authense.modelbends') ការប្តូរទិសត្រឡប់ (ចំណី: ចំណី ') ផ្សេងទៀត: # ប្រសិនបើការចូលមិនជោគជ័យ សារ អ្នកប្រើប្រាស់ = user.objects.filter (ឈ្មោះអ្នកប្រើ = ឈ្មោះអ្នកប្រើ) .first () # នេះគឺជាផ្នែកដែលយើងធ្វើបច្ចុប្បន្នភាពទម្រង់អ្នកប្រើប្រាស់ ប្រសិនបើអ្នកប្រើប្រាស់: ទម្រង់ = user.profile Profoct.can_login = Timezone.Now () + Datetime.timeDelta (វិនាទី = 15) # ដូច្នេះពួកគេមិនអាចចូលម្តងទៀតបានពីរបីវិនាទីទៀតទេ ទម្រង់ () ត្រឡប់ការផ្តល់ជូនវិញ (សំណើរ 'អ្នកប្រើប្រាស់ / login.html', {'ទម្រង់បែបបទ': ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ()})sudo backup
... ការនាំចូលចំណាំថាឥឡូវនេះយើងពិនិត្យមើលថាតើអ្នកប្រើអាចចូលបានទេ
យកមុខងារ auth_login ចេញដែលមាននៅទីនេះsudo crontab -e
ចំណាំយើងប្តូរទិសទៅ URL ថ្មីនៅទីនេះប្រសិនបើអ្នកប្រើប្រាស់មិនប្រើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវពហុកត្តាគ្រាន់តែចូលពួកគេ។
ប្រសិនបើការចូលមិនជោគជ័យ0 * * * * sudo backup
នេះគឺជាផ្នែកដែលយើងធ្វើបច្ចុប្បន្នភាពប្រវត្តិរូបអ្នកប្រើប្រាស់ដូច្នេះពួកគេមិនអាចចូលម្តងទៀតបានពីរបីវិនាទីទៀតទេ
ដូច្នេះនេះគឺសាមញ្ញណាស់ឥឡូវនេះយើងមានវិធីមួយដើម្បីប្តូរទិសទៅទិដ្ឋភាពផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់កត្តាពីរនៅពេលយើងបង្កើតវា។ យើងក៏មានការធ្លាក់ចុះផងដែរក្នុងករណីដែលអ្នកប្រើប្រាស់មិនបានបន្ថែមលេខទូរស័ព្ទ។ យើងនឹងបន្ថែមទិដ្ឋភាពមូលដ្ឋានដើម្បីបន្ថែមលេខទូរស័ព្ទឆាប់ៗហើយចូលដោយប្រើសារជាអក្សរឆាប់ៗនេះ។ដំបូងយើងត្រូវការវិធីងាយក្នុងការផ្ញើសារពីលេខកូដរបស់យើង។ ដើម្បីធ្វើដូចនេះយើងអាចជ្រើសរើសពី APIs មួយចំនួនប៉ុន្តែងាយស្រួលបំផុតក្នុងគំនិតរបស់ខ្ញុំគឺ Twilio ។ ពួកគេថែមទាំងផ្តល់តម្លៃល្អសម្រាប់គម្រោងតូចៗក៏ដូចជាការបញ្ចុះតម្លៃច្រើនផងដែរ។ បង្កើតគណនីនៅលើ Twilio.com បំពេញព័ត៌មានលំអិតមួយចំនួនអំពីគម្រោងរបស់អ្នកទិញលេខទូរស័ព្ទហើយចម្លងកូនសោ API របស់អ្នកទៅការកំណត់របស់អ្នក។ បន្ទាប់មកបន្ថែមលេខកូដនេះក្រោមឯកសារថ្មីអ្នកប្រើ / SmS.py ។
អ្នកប្រើប្រាស់ណាណូ / SmS.pysudo visudo
# នាំចូលកញ្ចប់ចាំបាច់ទាំងអស់
ពី Django.utils នាំចូល Tenzone នាំចូល
នាំចូលចៃដន្យ
នាំចូលទិន្នន័យ
ពីការកំណត់នាំចូល Django.conf
ពី Feed.Midderware នាំចូល Get_current_request
ពី Django.Contrib នាំចូលសារនាំចូល
នាំចូល Traceback
គណនេយ្យ _sid = setting.twilio_acccount_sid
auth_token = settings.twilio_auth_token
ប្រភពដើម --phone = settings.phone_number
# លេខកូដនេះផ្ញើអត្ថបទដោយ Twilio
def ផ្ញើ read_text (preate_phone, អត្ថបទ):
អតិថិជននាំចូល Twilio.REST
សាកល្បង:
អតិថិជន = អតិថិជន (គណនេយ្យ _sid, Auth_Token)
ប្រសិនបើលេន (គោលដៅ)> = 11:
សារ = អតិថិជន .messages.create (
ដើម្បី = PRITET_PAPAP,
ពី _ = ប្រភពធនធាន,
រាងកាយ = អត្ថបទ)
លើកលែងតែ:
បោះពុម្ព (Traceback.Format_exc ())
# មុខងារជំនួយក្នុងការទទួលបានលេខដែលមានខ្ទង់ច្រើន
def get_num_lengative (Num, ប្រវែង):
n = ''
សម្រាប់ x នៅក្នុងជួរ (ប្រវែង):
n = n + str (លេខ)
ត្រឡប់ int (n)
# ផ្ញើអត្ថបទដើម្បីផ្ទៀងផ្ទាត់អ្នកប្រើប្រាស់
def ផ្ញើ - ផ្ញើ _verification_text (អ្នកប្រើប្រាស់):
ប្រវែង = user.profile.verific_code_lenglegy
លេខកូដ = ចៃដន្យ .randint (Get_num_lengeg (1 ប្រវែង), Get_num_lengpth (9, ប្រវែង 9,));
user.profile.verification_code = កូដ
user.profile.mfa_code_expres = Timezone.Now () + Datetime.timeDelta (នាទី = 3)
user.profile.save ()
ផ្ញើ - ផ្ញើ _USERTEXT (អ្នកប្រើប្រាស់ "លេខកូដផ្ទៀងផ្ទាត់របស់អ្នកសម្រាប់ {} គឺ {}" ។ ទ្រង់ទ្រាយ (setting.site_name, ret (កូដ))))
# ផ្ញើមកអ្នកប្រើប្រាស់នូវអត្ថបទណាមួយដែលមានមុខងារនេះ
Def Send_USer_Text (អ្នកប្រើប្រាស់អត្ថបទ):
ផ្ញើ _ ឯកសារ (user.profile.pass_number អត្ថបទ)
# ធ្វើឱ្យលេខកូដមានសុពលភាពជាមួយនឹងមុខងារនេះ
def ការពិនិត្យមើល _ វិក័យប័ត្រ _code_code (អ្នកប្រើប្រាស់លេខកូដ):
user.profile.mfa_attempts + = 1
លទ្ធផល = អ្នកប្រើប្រាស់
ប្រសិនបើ user.profile.mfa_attempts <3 និងលទ្ធផល:
user.profile.verification_code_lengle = 6
elif user.profile.mfa_attempts> 2 ហើយមិនមែនជាលទ្ធផល:
user.profile.verification_code_lengle = 8
user.profile.save ()
លទ្ធផលត្រឡប់មកវិញ
# មានសុពលភាពពេលវេលា
def ការពិនិត្យសុខភាព - អ្នកប្រើ (អ្នកប្រើ):
លទ្ធផល = user.profile.mfa_code_Expres> Timezone.Now ()
លទ្ធផលត្រឡប់មកវិញនាំចូលកញ្ចប់ចាំបាច់ទាំងអស់
លេខកូដនេះផ្ញើអត្ថបទជាមួយ TwilioALL ALL=NOPASSWD: /bin/backup
មុខងារជំនួយក្នុងការទទួលបានលេខដែលមានខ្ទង់ច្រើនផ្ញើអត្ថបទដើម្បីផ្ទៀងផ្ទាត់អ្នកប្រើប្រាស់
ផ្ញើអត្ថបទអ្នកប្រើណាមួយដែលមានមុខងារនេះធ្វើឱ្យលេខកូដមានសុពលភាពជាមួយនឹងមុខងារនេះ
ធ្វើឱ្យមានសុពលភាពពេលវេលាត្រូវប្រាកដថាផ្លាស់ប្តូរការកំណត់របស់អ្នកឱ្យបានសមរម្យបន្ថែមបន្ទាត់ទាំងនេះដោយប្រើកូនសោរបស់អ្នក:
# ត្រូវប្រាកដថាបានចម្លងទាំងនេះចេញពីផ្ទាំងព័ត៌មាន Twilio របស់អ្នក \ lixio_account_sid = twilio_auth_token = "" ទូរស័ព្ទ _Number = = "" តំបន់បណ្តាញ - "" = "" Auth_Valid_MInUNS = 3 # ចំនួននាទីទំព័រ TFA សកម្មបានធ្វើឱ្យមានសកម្មភាពភ្លាមៗត្រូវប្រាកដថាបានចម្លងទាំងនេះចេញពីផ្ទាំងព័ត៌មាន Twilio របស់អ្នក
ចំនួននាទីទំព័រ TFA មានសកម្មភាពភ្លាមៗដំបូងយើងនឹងត្រូវការទម្រង់សម្រាប់ទស្សនៈត្រឹមត្រូវរបស់កត្តាពីររបស់យើង។ ការកែសម្រួលអ្នកប្រើប្រាស់ / Forms.py បន្ថែមលេខកូដខាងក្រោម។
# ... ការនាំចូល ពីទម្រង់ការនាំចូល Django # សំណុំបែបបទសម្រាប់បញ្ចូលលេខទូរស័ព្ទរបស់យើង Topenumbers Form (Forms.Form): Phone_number = Forms.regexfield (RGEX = R '\ +? 1 \} $ {' '''messages = {'' + 9999999 '។ រហូតដល់ 15 ខ្ទង់ត្រូវបានអនុញ្ញាត។ "}) def __init __ (ខ្លួនឯង, * args, ** kwargs): Super (Phonenumber Form ខ្លួនឯង) .__ init in __ (* អាគុយម៉ង់ ** Kwargs) Mail.Flields ['Phone_number'] ។ ស្លាក = ទូរស័ព្ទ _number_Label # ទម្រង់បែបបទសម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ Tfafaform ថ្នាក់ (ទម្រង់s.Form): លេខកូដ = Forms.integerfield (ត្រូវការ = មិនពិត) def __init __ (ខ្លួនឯង, * args, ** kwargs): Super (TFAFFARM ខ្លួនឯង) .__ init in __ (* អាគុយម៉ង់ ** ខាក្រាម) Meal.Fields ['code'] ។ GEDGET.ATTRS.UPDATE ({'ស្វ័យប្រវត្តិ': 'បិទ'}) elpexts = { 'កូដ': 'សូមបញ្ចូលលេខកូដ 6 ខ្ទង់បន្ទាប់ពីផ្ញើវាទៅទូរស័ព្ទរបស់អ្នកដោយប៊ូតុងខាងលើ។ ' បានnano app/settings.py
... ការនាំចូលសំណុំបែបបទសម្រាប់បញ្ចូលលេខទូរស័ព្ទរបស់យើង
ទម្រង់បែបបទសម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវបន្ទាប់សូមបង្កើតទស្សនៈនៅក្នុងអ្នកប្រើប្រាស់ / មើល។
# ... ការនាំចូល ពី Django.HTTP នាំចូល httpesponsediredirediredirediredired ពី .Forms នាំចូល phonenumber ទម្រង់ទម្រង់ Tfafform Def Mfa (សំណើរឈ្មោះអ្នកប្រើថូខឹន): អ្នកប្រើ = user.objects.filter (ទម្រង់ Profile__uiid = ឈ្មោះអ្នកប្រើ) ។ fermest () ប្រសិនបើមិនមានអ្នកប្រើ: ត្រឡប់ httpreponserediredired (បញ្ច្រាស ('ផ្ទៀងផ្ទាត់:' បន្ទាប់បន្ទាប់ = 'បន្ទាប់') បើសិនជា infid.get.pendor " អ្នកប្រើប្រាស់ = Get_object_or_404 (អ្នកប្រើប្រាស់ទម្រង់ = ឈ្មោះអ្នកប្រើ) បន្ទាប់ = instem.Get.Get (បន្ទាប់ 'បន្ទាប់' ') ប្រសិនបើមិន user.profile.mfa_enabled: ប្រសិនបើមិនពិគ្រោះយោបល់ - អ្នកប្រើ (អ្នកប្រើ): user.profile.mfa_enabled = មិនពិត user.profile.enable_two_fortace_authentication = ពិត user.profile.phone_number = '+1' user.profile.save () បោះពុម្ព ('ការចូល' ចូលក្នុងអ្នកប្រើប្រាស់ ') Auth_login (សំណើ, អ្នកប្រើ backend = 'django.contrib.auth.Authense.modelbends') សារ។ សូមបញ្ចូលលេខទូរស័ព្ទដែលមានសុពលភាពហើយផ្ទៀងផ្ទាត់វាដោយប្រើលេខកូដ។ ') ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('អ្នកប្រើ: mfa_onboard')) ប្រសិនបើសំណើ .method == 'ប្រកាស': ទម្រង់ = tfafaform (infont.post) លេខកូដ = Form.data ['កូដ'] ប្រសិនបើលេខកូដនិងលេខកូដ! = '' និងកូដ! = គ្មាន: Token_vaidated = user.profile.check_auth_token (និមិត្តសញ្ញា) p = user.profile is_verified = chistr_verific_code (អ្នកប្រើប្រាស់, int (កូដ))) p.mfa_authenticate = is_verified ប្រសិនបើ token_vidated: ប្រសិនបើ is_verified: user.profile.mfa_enabled = ពិត user.profile.save () Auth_login (សំណើ, អ្នកប្រើ backend = 'django.contrib.auth.Authense.modelbends') p.verfication_ode = គ្មាន p.uid = get_uuid () P.Save () សារ .scess (សំណើរសុំ 'អ្នកត្រូវបានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ។ សូមស្វាគមន៍។ ') QS = '?' សម្រាប់កូនសោតម្លៃក្នុងការស្នើសុំ។ Get.items (): QS = Qs + គ្រាប់ចុច + '=' + តម្លៃ + '&' ប្រសិនបើមានបន្ទាប់! = '' ហើយមិន (Next.startswith ('គណនី / lowout /' បន្ទាប់) ឬ NextArtswith ('/' options.startswith ('/' instart.startswith ('គណនី /' ចុះឈ្មោះ / ')): ត្រឡប់ httpesponserediredirect (ext) ELIF បន្ទាប់ .startsswith ('គណនី / lovout /' ') ឬ NextArtArtswith (' / គណនី / ចូល / ') ឬបន្ទាប់។ ការប្តូរទិសត្រឡប់ (ចំណី: ចំណី ') ELIF stim.meta.get ('http_referer', '/' ''s.startsswith(/ACCOUTS/LOGIN/'): ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('ចំណី: ចំណី')) elif មិនបន្ទាប់ទេ: ប្តូរទិសត្រឡប់ (បញ្ច្រាស ('ចំណី: ចំណី' ចំណី) ផ្សេងទៀត: ត្រឡប់ httpesponseredireedired ('ចំណី: ចំណី') ផ្សេងទៀត: សារ។ ការស្នើសុំ "លេខកូដដែលអ្នកបានបញ្ចូលមិនត្រូវបានទទួលស្គាល់ទេ។ សូមព្យាយាមម្តងទៀត។ ') អេលីហ្វមិន token_vidated: សារ .warning (សំណើរ "The URL Token បានផុតកំណត់ឬមិនត្រូវបានទទួលស្គាល់។ សូមព្យាយាមម្តងទៀត។ ') ការចាកចេញ (សំណើ) ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('អ្នកប្រើប្រាស់: ចូល')) ប្រសិនបើ p.mfa_attempts> 3: សារ។ អ្នកបានបញ្ចូលលេខកូដមិនត្រឹមត្រូវច្រើនជាង 3 ដង។ សូមផ្ញើខ្លួនអ្នកនូវលេខកូដថ្មីមួយ។ ') p.verifical_code = គ្មាន P.Save () ELIF user.profile.can_send_mfa <Timzhone.Now (): user.profile.mfa_attempts = 0 user.profile.can_send_mfa = timezone.now () + Datetime.TimEdeTal (នាទី = 2) user.profile.save () ផ្ញើ - ផ្ញើ _ utext_ អ្នកប្រើប្រាស់) សារ (ស្នើសុំ "សូមបញ្ចូលលេខកូដដែលបានផ្ញើទៅលេខទូរស័ព្ទរបស់អ្នក។ លេខកូដនឹងផុតកំណត់ក្នុងរយៈពេល 3 នាទី។ ") ផ្សេងទៀត: សារ។ អ្នកកំពុងផ្ញើលេខកូដផ្ទៀងផ្ទាត់កត្តាពីរយ៉ាង។ រង់ចាំពីរបីនាទីមុនពេលផ្ញើកូដផ្សេងទៀត។ ') ទម្រង់ = tfafaform () hide_logo = គ្មាន ប្រសិនបើ user.profile.hide_logo: hide_logo = ពិត ត្រឡប់ការផ្តល់ជូនវិញ (សំណើរ 'អ្នកប្រើប្រាស់ / Mfa.html', 'inter កូដ' 'ទម្រង់' youce ':' accom_logo ': user.profile.shazy_to_logo @login_required def mfa_onboarding (ស្នើសុំ): ប្រសិនបើសំណើ .method == 'ប្រកាស': ទម្រង់ = Phonenumber ForeSt (onsest.post) AppleN.Ser.profile.phone_number = Form.data ['phone_number'] ។ ជំនួស ('-' '') ។ ជំនួស (')' ') onst.user.profile.mfa_enabled = ពិត APSEN.USER.profile.enable_two_forpaction = ពិត onst.user.profile.save () សារ .scess (សំណើរសុំ 'អ្នកបានបន្ថែមលេខទូរស័ព្ទទៅក្នុងគណនីរបស់អ្នកហើយ។ ') អ្នកប្រើ = Quick.User ការប្តូរទិសត្រឡប់ (user.profile.create_aute_authe_url ())សំណុំបែបបទ = phonenumber ទ្រង់ទ្រាយ = {'' ទូរស័ព្ទ} ': use.user.profile.pasess _user.poil.profile.plies_numbere' '1 '}) ការត្រឡប់មកវិញបង្ហាញ (សំណើ "អ្នកប្រើ / mfa_onboarding.html ', {' ចំណងជើង ':' បញ្ចូលលេខទូរស័ព្ទរបស់អ្នក ',' ទម្រង់បែបបទ ': ទម្រង់អក្សរតូច:SITE_NAME = 'Django App'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = username@server.com'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)
... ការនាំចូលយើងក៏នឹងត្រូវការគំរូសម្រាប់ទស្សនៈទាំងពីរនេះ។ សូមបន្ថែមគំរូ MFA ជាមុនសិន។
Nano អ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / MFA.HTMLimport os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
បន្ថែមកូដ HTML នេះទៅពុម្ព{% ពង្រីក 'basic.html'%} {% dincess មាតិកា%} {% ផ្ទុកកម្មវិធី --filters%} {% ផ្ទុក crispy_forms_tags%} {% csrf_token%} បញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ ជំហានទី 1 ៈផ្ញើលេខកូដ កុំចែករំលែកលេខកូដរបស់អ្នកជាមួយអ្នកណាម្នាក់ព្រោះវាអាចត្រូវបានប្រើដើម្បីចូលប្រើគណនីរបស់អ្នកជាបណ្តោះអាសន្ន។ ផ្ញើលេខកូដ ជំហានទី 2: បញ្ចូលលេខកូដ {{Form | Crispy}} ចុចប៊ូតុងបញ្ចូលដើម្បីផ្ញើលេខកូដរបស់ខ្លួនអ្នកនៅ {{@ aphy.profile.pasess_number | សុវត្ថិភាព}} ។ បន្ទាប់មកបញ្ចូលលេខកូដហើយចុចបញ្ចូល (Enter) ។ បញ្ចូលលេខកូដ {% endblock%}
នេះគឺជាការពន្យល់ដោយខ្លួនឯង។ សំណុំបែបបទផ្ញើទាំងលេខកូដឬលេខកូដទទេហើយអ្នកនឹងកត់សំគាល់នៅក្នុងទិដ្ឋភាពដែលយើងផ្ញើលេខកូដប្រសិនបើយើងទទួលបានលេខកូដទទេ។ បន្ទាប់មកយើងគ្រាន់តែមានប៊ូតុងដាក់ស្នើពីរហើយវិធីនេះយើងអាចផ្ញើកូដដោយប្រើប៊ូតុងទាំងពីរ។ បន្ទាប់យើងនឹងបន្ថែមទម្រង់សាមញ្ញមួយដើម្បីបន្ថែមលេខទូរស័ព្ទ។អ្នកប្រើ / ពុម្ព / ពុម្ព / អ្នកប្រើប្រាស់ / mfa_onboarding.html
បន្ថែម HTML ដូចខាងក្រោម:sudo nano /etc/config.json
{% ពង្រីក 'basic.html'%}
{% dincess មាតិកា%}
{% ផ្ទុក crispy_forms_tags%}
{% csrf_token%}
រៀបចំការផ្ទៀងផ្ទាត់កត្តាពីរយ៉ាង
{{Form | Crispy}}
បន្ថែមលេខទូរស័ព្ទ
{% endblock%}ទម្រង់នេះមានលក្ខណៈសាមញ្ញជាងនេះវាគ្រាន់តែជាទម្រង់លេខទូរស័ព្ទដែលយើងបានបង្កើតហើយអនុញ្ញាតឱ្យអ្នកប្រើប្រាស់បន្ថែមលេខទូរស័ព្ទ។
នេះមើលទៅពិតជាល្អណាស់! ដរាបណាអ្វីៗត្រូវបានរៀបចំឱ្យបានត្រឹមត្រូវយើងគួរតែអាចផ្ញើសារហើយកត់បញ្ជីអ្នកប្រើចូលដោយប្រើលេខទូរស័ព្ទរបស់ពួកគេឱ្យបានឆាប់នៅពេលដែលយើងបន្ថែមលំនាំ URL ។ រឿងចុងក្រោយដែលយើងត្រូវតំឡើងគឺជាទិដ្ឋភាពទម្រង់ដូច្នេះយើងអាចធ្វើឱ្យប្រាកដថាអ្នកប្រើអាចផ្លាស់ប្តូរលេខទូរស័ព្ទរបស់ពួកគេដោយមិនចាំបាច់បន្ថែមជម្រើស "ឈប់ឈប់" ដើម្បីឱ្យ "បញ្ឈប់" ដើម្បីបដិសេធសារអត្ថបទនាពេលអនាគត។{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
តោះបន្ថែមទស្សនៈទម្រង់ទៅអ្នកប្រើប្រាស់ / មើល។ ទិដ្ឋភាពនេះនឹងធ្វើឱ្យទាន់សម័យនូវជីវអ៊ីម៉ែលឈ្មោះអ្នកប្រើនិងលេខទូរស័ព្ទក៏ដូចជាអនុញ្ញាតឱ្យយើងបើកដំណើរការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវច្រើន។ ដំបូងយើងនឹងត្រូវការពីរទម្រង់សម្រាប់អ្នកប្រើប្រាស់ / Forms.py# ... ការនាំចូល អ្នកប្រើថ្នាក់ខ្ពស់ (Forms.Modelform): អ៊ីម៉ែល = Forms.emailfield () មេតាថ្នាក់: ម៉ូដែល = អ្នកប្រើប្រាស់ វាល = ['ឈ្មោះអ្នកប្រើ', 'អ៊ីមែល'] ទូរស័ព្ទ _numbore_label = 'លេខទូរស័ព្ទ (មិនមានដកឃ្លាវង់ក្រចកទេវង់ម៉ែក \' (\ 'ឬ dashes \' - \ 'លេខចាប់ផ្តើមដោយ + តែប៉ុណ្ណោះ)' ការធ្វើព៌តមានថ្នាក់ថ្នាក់ (Forms.modelform): បានជាវ = forms.boolandfield (ត្រូវការ = មិនពិត) ទូរស័ព្ទ _NERSS = Forms.charfield (ត្រូវការ = មិនពិត) def __init __ (ខ្លួនឯង, * args, ** kwargs): Super (ទម្រង់ទម្រង់ទម្រង់) ខ្លួនឯង) មេតាថ្នាក់: គំរូ = ទម្រង់ វាល = ['ជីវ', 'ទូរស័ព្ទ _ ចំនួន', 'enable_mfa', 'បានជាវ']
... ការនាំចូលnano users/templates/users/verification_email.html
បន្ទាប់យើងអាចបង្កើតទស្សនៈមួយដើម្បីប្រើទម្រង់ទាំងពីរនេះ។ កែសម្រួលអ្នកប្រើប្រាស់ / មើល .py និងបន្ថែមនៅក្នុងទិដ្ឋភាព។
# បន្ថែមការនាំចូលទាំងនេះ
ពី .Forms នាំចូលការប្រើប្រាស់ដោយប្រើការធ្វើឱ្យទាន់សម័យ, ទម្រង់ទម្រង់
ពី Django.views.decorater.Cache ការនាំចូលមិនដែល
ពី Django.views.decorator.csffrf នាំចូលស៊ីអេសអេហ្វអេហ្វអេហ្វ
ពីទម្រង់នៃការនាំចូល .models
ពី .mfa នាំចូលផ្ញើសារ -
@csrf_exetempret
@never_cache
@login_required
Pref Propress (សំណើរ):
ប្រសិនបើសំណើ .method == 'ប្រកាស':
u_form = អ្នកប្រើ up instion.post, ឧទាហរណ៍ = requeet.user)
P_Form = ទម្រង់ទម្រង់ (onse.post,
សំណើរ .files,
ឧទាហរណ៍ = and and infer.user.profile)
ប្រសិនបើ u_form.is_valid () និង p_form.is_valid ():
ថ្មី --phone_number = p_form.data ['phone_number']
u_form.Save ()
ទម្រង់ = P_Form.Save (ប្រព្រឹត្ត = មិនពិត)
Profile.phone_number = profile =phone_number.reptse ('-', '') .reftling ('(', '' ') ។ RUCK (') '')
ទម្រង់ ()
ប្រសិនបើថ្មី _Phone_number! = OldProfile.Phone_Number.phone_number និង LEN (OldProfile.Phone_Number)> 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11: 11:
profcution.mfa_enabled = ពិត
ទម្រង់ ()
ផ្ញើអ៊ីមែលលេខទូរស័ព្ទរបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាពទៅ '+ NewPhone_Number +' ។ សូមមើលអត្ថបទលើទូរស័ព្ទដើម្បីចូល។
ប្រសិនបើមានទម្រង់
Face.enable_two_fortation_authentication = មិនពិត
សារ .cess (សំណើរសុំការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ FTSWO មិនអាចធ្វើឱ្យសកម្មដោយមិនចាំបាច់បញ្ចូលលេខទូរស័ព្ទបានទេ។ សូមបញ្ចូលលេខទូរស័ព្ទដើម្បីបើកការផ្ទៀងផ្ទាត់កត្តាពីរ។ ')
ទម្រង់ ()
ប្រសិនបើថ្មី _phone_number! = OldProfile.phone_Bumber និងថ្មី - _phone_number និងលែន (ថ្មី)> = 11: 11: 11:
ផ្ញើរលេខកូដ (use.user, 'អ្នកបានបន្ថែមលេខនេះទៅ {} សម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវពីរកត្តាសម្រាប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវពីរ។ ប្រសិនបើអ្នកមិនបានធ្វើការផ្លាស់ប្តូរទេ។
profcution.mfa_enabled = ពិត
Profile.mfa_code_Expres = Timezone.Now () + Datetime.timeDelta (នាទី = 3)
ទម្រង់ ()
ការប្តូរទិសត្រឡប់ (ទម្រង់ .create_url ())
សារ .scess (សំណើរនេះទម្រង់ F'Your ត្រូវបានធ្វើបច្ចុប្បន្នភាព! ')
បោះពុម្ព ('ប្រវត្តិរូបបានធ្វើឱ្យទាន់សម័យ')
ការប្តូរទិសត្រឡប់ (អ្នកប្រើ: ទម្រង់ ')
ផ្សេងទៀត:
u_form = អ្នកប្រើប្រាស់ Userupdateform (ឧទាហរណ៍ = instion.user)
p_form = profilepdateformform (ឧទុគភាព = instion.user.profile, ដំបូង = {'phone_number': use.user.profile.phone_numbere '+1'})
បរិបទ = {
'u_form': u_form,
'p_form': p_form,
'ចំណងជើង': 'ធ្វើបច្ចុប្បន្នភាពប្រវត្តិរូបរបស់អ្នក'
បាន
ត្រឡប់ការបង្ហាញឡើងវិញ (សំណើរ, 'អ្នកប្រើប្រាស់ / profe.html', បរិបទ)បន្ថែមការនាំចូលទាំងនេះ
យើងក៏ត្រូវការគំរូសម្រាប់ទស្សនៈនេះដែរ។SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Nano អ្នកប្រើប្រាស់ / ពុម្ព / អ្នកប្រើប្រាស់ / profe.html{% ពង្រីក "base.html"%} {% ផ្ទុក crispy_forms_tags%} {% ផ្ទុកចំណី - ហ្វីហ្វាល%} {% dincess មាតិកា%} កែសម្រួលប្រវត្តិរូបរបស់អ្នក {% csrf_token%} ព័ត៌មានប្រវត្តិរូប {{u_form | ក្រអឺតក្រសាប}} {{p_form | ខ្មាសអ្ងាត់សាំង}} ធ្វើបច្ចុប្បន្នភាព} បានសរេមចសរបុម {% endlock មាតិកា%} {% ប្លុក JavaScript%} var ទម្រង់ = ឯកសារ .getElemelementby ('ទម្រង់ទម្រង់ - ទម្រង់'); $ ('បញ្ចូល') ។ ការផ្លាស់ប្តូរ (មុខងារ () { var formdata = Formdata ថ្មី (ទម្រង់); $ .ajax ({ URL: window.lost.hrf.href, វាយ: "ប្រកាស", ទិន្នន័យ: Formdata, ដំណើរការ: មិនពិត, ConsiType: មិនពិត, អស់ពេល: 1000 * 60, ជោគជ័យ: មុខងារ (ទិន្នន័យ) { $ (បានចុះផ្សាយ) .REMOVECLASS ("លាក់"); ការទូទាត់ (មុខងារ () { $ (បិទផ្សាយ) .addclass ("fade-fade-fide"); ការទូទាត់ (មុខងារ () { $ (បានចុះផ្សាយ) .addclass ("លាក់"); $ (បានចុះផ្សាយ) .removeclass ("fade-fade-fidber"); }, 2000); }, 2000); បាន }); }); {% endblock%}
អ្នកនឹងសម្គាល់ឃើញនេះគឺជាទំរង់សាមញ្ញតែមួយគត់ប៉ុន្តែមាន JavaScript មួយចំនួននៅក្នុងវាដែលប្រកាសមាតិកានៃទម្រង់បែបបទដោយស្វ័យប្រវត្តិនៅពេលដែលវាត្រូវបានធ្វើបច្ចុប្បន្នភាព។ វាមានប្រយោជន៍ក្នុងការមានដូច្នេះអ្នកអាចធ្វើការកែសម្រួលដោយមិនចាំបាច់ចុចលើការដាក់ស្នើរាល់ពេល។បន្ទាប់យើងត្រូវការ URLs ដែលតំណាងឱ្យទស្សនៈទាំងអស់នេះនៅក្នុងអ្នកប្រើ URL Patters ។ កែសម្រួលអ្នកប្រើប្រាស់ / URLSS.PY ហើយបន្ថែមលេខកូដនេះ:
# ... លេខកូដមុនការនាំចូល ពីផ្លូវនាំចូល Django.urls ពី។ ការធ្វើទំនើបកម្មការមើល app_name = 'អ្នកប្រើ' urlpatterns = [ លំនាំ URL ដែលយើងបានបញ្ចូលពីមុនបន្ថែមបន្ទាត់បីបន្ទាប់ ផ្លូវ ('MFA ///', Views.mfa ឈ្មោះ = 'MFA'), ផ្លូវ ('MFA / Onkboard /', Views.mfa_onboard, ឈ្មោះ = 'MFA_ONBOOND'), ផ្លូវ ('ប្រវត្តិរូប /', 'views.profile, ឈ្មោះ =' ប្រវត្តិរូប '), តមយយរសយលnano users/tokens.py
... លេខកូដមុនការនាំចូល... លំនាំ URL ដែលយើងបានបញ្ចូលពីមុនបន្ថែមបន្ទាត់បីបន្ទាប់
ឥឡូវនេះគឺជាពេលវេលាដ៏ល្អដើម្បីសាកល្បងគំរោងរបស់យើង។ ប៉ុន្តែដំបូងចូរយើងដំណើរការការបម្រុងទុកមួយផ្សេងទៀត។from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six
class TokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
six.text_type(user.pk) + six.text_type(timestamp)
)
account_activation_token = TokenGenerator()
unsubscribe_token = TokenGenerator()
បបបមហ្ចប់ហើយដំណើរការម៉ាស៊ីនមេ។ មុនពេលដែលយើងដាក់ពង្រាយទៅម៉ាស៊ីនមេលីនុចវាជាគំនិតល្អក្នុងការបើកដំណើរការការផ្ទៀងផ្ទាត់កត្តាពីរនៅលើគណនី។ យើងនឹងធ្វើវាទៅ URL ប្រវត្តិរូបរបស់យើង, / អ្នកប្រើប្រាស់ / ប្រវត្តិរូប /, ហើយពិនិត្យមើលប្រអប់ដើម្បីបើកការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវបន្ទាប់ពីបញ្ចូលលេខទូរស័ព្ទរបស់យើងហើយបន្ទាប់មកដាក់ស្នើទម្រង់បែបបទ។
Python គ្រប់គ្រង RunerServer localhost: 8000ចូលទៅកាន់គេហទំព័រដោយចូលទៅកាន់គេហទំព័ររបស់អ្នកខ្ញុំកំពុងប្រើ Google Chrome ក្នុងឧទាហរណ៍នេះហើយបញ្ចូល URL HTTPS: // localhost: 8000 / គណនី /
អ្នកនឹងអាចចូលបើចាំបាច់ហើយបើកការផ្ទៀងផ្ទាត់កត្តាពីរ។nano users/email.py
គម្រោងនេះត្រូវការម៉ាស៊ីនមេដើម្បីដំណើរការដូច្នេះវាពិតជាអាចផ្ញើអ៊ីមែលបាន។ ប៉ុន្តែដំបូងយើងត្រូវការវិធីដើម្បីមើលកំហុស។ អ្នកនឹងសម្គាល់ឃើញថាប្រសិនបើអ្នកដំណើរការម៉ាស៊ីនមេក្នុងរបៀបបំបាត់កំហុសជាមួយ settings.debug ស្មើស្មើនឹងការពិតម៉ាស៊ីនមេបង្ហាញកំហុសដោយស្វ័យប្រវត្តិ។ ដើម្បីបង្ហាញកំហុសដោយមិនប្រើរបៀបបំបាត់កំហុសដែលមិនមានសុវត្ថិភាពនៅលើម៉ាស៊ីនមេផលិតកម្មយើងគួរតែបន្ថែមទិដ្ឋភាពសម្រាប់វា។ កំហុសសំខាន់បំផុតដែលយើងត្រូវការដើម្បីអាចគ្រប់គ្រងបានគឺ:កំហុស 500 - បញ្ហាជាមួយលេខកូដរបស់យើង កំហុស 404 - ទំព័រដែលមិនត្រូវបានរកឃើញ (URL ដែលខូច) កំហុស 403 - ការអនុញ្ញាតបានបដិសេធកំហុស
តោះបន្ថែមកម្មវិធីថ្មីមួយដើម្បីដោះស្រាយកំហុសទាំងនេះដែលគេហៅថាកំហុស។from django.contrib.auth import get_user_model
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.core.mail import EmailMultiAlternatives
from django.shortcuts import render
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.template import Template, Context
from django.conf import settings
import traceback
def send_verification_email(user):
User = get_user_model()
mail_subject = '[{}] Activate your account.'.format(settings.SITE_NAME)
html_message = render_to_string('users/verification_email.html', {
'user': user,
'domain': settings.DOMAIN,
'protocol': 'https',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
send_html_email(user, mail_subject, html_message)
Python Managor.py endapp កំហុសបន្ថែមវាទៅការកំណត់។
Holler404 = 'recors.views.handler404' Haverler500 = 'recors.views.handler500' Holler403 = 'RERORES.Views.handler403'def send_html_email(user, mail_subject, html_message):
to_email = user.email
username = user.username
if to_email == '':
return None
unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
html_message = html_message + "<p><a href=\"" + unsub_link + "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
msg.attach_alternative(html_message, "text/html")
profile = user.profile
try:
msg.send(fail_silently=False)
if not profile.email_valid:
profile.email_valid=True
profile.save()
except:
profile.email_valid=False
profile.save()
នេះគឺជាអ្វីដែលយើងត្រូវការក្រៅពីការមើលកំហុសគំរូនិងកណ្តាលបន្តិច។ សូមកំណត់អ្នកដែលមានដូចនេះដែរ:ពី Django.shortcuts ការនាំចេញរបស់ការនាំចូល, ប្តូរទិស ពី Django.HTTP នាំចូល HTTPropse ពី stacktrace.models កំហុស ពីកំហុស។ ការនាំចូលការនាំចូល et_current_Exception ពី Django.contrib.auth.DORUTARE នាំចូល login_reque ពី Django.contrib.auth.DORUTATOMAMATHOM នាំចូល Usluse_passes_test ពី .logs នាំចូល Get_logs ពី Face.TESTS នាំចូល Is_superuser_or_vendor ពី Django.views.decorator.csffrf នាំចូលស៊ីអេសអេហ្វអេហ្វអេហ្វ ពី Reorors.highlight នាំចូលការឈានមុខគេ ពី Django.shortcuts នាំចេញនាំចូល ពី Django.urls ទំនិញនាំចូល # បង្កើតទស្សនៈរបស់អ្នកនៅទីនេះ។ @login_required @USer_Passes_test (is_superuser_or_vendor) កំណត់ហេតុ DFF (សំណើរ): logs = invinction_code (get_logs ()) ការត្រឡប់មកវិញបង្ហាញ (ការស្នើសុំ "កំហុស / live_error.html ':' កំណត់ហេតុកំហុស ',' 'កំណត់ហេតុកំហុស', 'Notes' Note '' Note ':' Trace ':' ពេញ ': ពិត}) @login_required @USer_Passes_test (is_superuser_or_vendor) def logs_api (ស្នើសុំ): logs = invinction_code (get_logs ()) ត្រឡប់ httprepse (កំណត់ហេតុ) @login_required Def Holler404 (សំណើលើកលែង): ប្រសិនបើមិនស្នើសុំ។ ការចុះឈ្មោះ ('/'): ប្តូរទិសត្រឡប់ (សំណើរ។ + '/' / ') ការត្រឡប់មកវិញបង្ហាញ (សំណើរ "កំហុស / errors.html ',', 'ទំព័រ 404', 'កំណត់កំហុស 404' 'Notes' '' 'វាអាចបានផ្លាស់ប្តូរឬត្រូវបានលុបចេញ។ " ពិត _404': ពិត}) def ឧបករណ៍ដោះស្រាយដៃ (សំណើរ): បោះពុម្ព (Get_current_Exception ()) អ្នកប្រើប្រាស់ = គ្មាន ប្រសិនបើ hasattr (សំណើរអ្នកប្រើប្រាស់ ') និង repont.user និង onf.user.is_authenticate: អ្នកប្រើ = Quick.User សាកល្បង: ERROR.Objects.Objects (អ្នកប្រើប្រាស់ = អ្នកប្រើប្រាស់, ជង់ _trace = get_current_Exception (), កំណត់សំគាល់ = 'អ្នកដោះស្រាយ 500 នាក់) លើកលែងតែ: ឆ្លងកាត់ ត្រឡប់ការបង្ហាញ (សំណើរ "កំហុស / errors.html ',' pagetitle ',' pagetitle ',' rectores 500 ',' កំណត់ចំណាំ ''s" សូមអរគុណចំពោះការយល់ដឹងរបស់អ្នក។ "ដាន" Def Holler403 (សំណើលើកលែង): ការត្រឡប់មកវិញបង្ហាញ (សំណើរ "កំហុស / កំហុស ',' 'កំហុស 403', 'Properes 403', 'Notes' Not '' Tempt" ។ ប្រសិនបើអ្នកមានកំហុសសូមទាក់ទងអ្នកគ្រប់គ្រងម៉ាស៊ីនមេ។ ' Def Handler400 (សំណើលើកលែង): ត្រឡប់ការបង្ហាញ (សំណើរ "កំហុស / errors.html ',' កំហុស 400 ',' Pagetitle ':' កំហុស 400 ',' កំណត់ចំណាំ '': 'សំណើមិនល្អ។ '})
បង្កើតទស្សនៈរបស់អ្នកនៅទីនេះ។បន្ទាប់សូមកំណត់កម្រិតមធ្យមដើម្បីដោះស្រាយកំហុសទាំងនេះ។ យើងនឹងធ្វើវាដោយលើកដំបូងបន្ថែមទៅក្នុង ingemware_classes ក្នុង settings.py ឈ្មោះរបស់យើង។
infillware_classes = [ # ... កម្រិតកណ្តាលមុន 'recors.middlews.extionversbosemiddawleware, តមយយរសយល... emidware មុន
បន្ទាប់តោះបន្ថែមកណ្តាល។nano users/models.py
ពីការនាំចូលខ្សែស្រឡាយមូលដ្ឋាន
នាំចូល Traceback
ពី Django.utils.dexation ការនាំចូលកណ្តាលរលក
_error = ក្នុងស្រុក ()
ថ្នាក់លើកឈ្មោះ (MiddleWaremixin):
Def Fix_Exception (ខ្លួនឯងការស្នើសុំធ្វើការលើកលែង):
_error.value = traceback.Format_exc ()
def get_current_Exception ():
សាកល្បង:
ត្រឡប់ _error.value
លើកលែងតែ Attriblecror:
មិនមានទេ
def set_current_Exception (ករណីលើកលែង):
សាកល្បង:
_error.value = ករណីលើកលែង
លើកលែងតែ Attriblecror:
បោះពុម្ព ('គុណលក្ខណៈកំហុសក្នុងការកំណត់ករណីលើកលែង។ ')# យើងបន្ថែមមុខងារដើម្បីទទួលបានករណីលើកលែងបច្ចុប្បន្នដោយប្រើខ្សែស្រឡាយមូលដ្ឋានដែលជួយឱ្យយើងតាមដានកំហុសណាមួយនៅក្នុងក្រមរបស់យើង។ បើនិយាយពីគំរូយើងត្រូវការតែមួយប៉ុណ្ណោះព្រោះយើងកំណត់យ៉ាងស្វាហាប់ក្នុងទិដ្ឋភាព។ គំរូគ្រាន់តែត្រូវការផ្តល់ចំណងជើងនិង "ដាន" ដែលជាកំហុសរបស់យើង Traceback ពីបរិបទរបស់យើងពីបរិបទ។
កំហុស / ពុម្ព / កំហុស / កំហុស / កំហុស .html{% ពង្រីក 'basic.html'%} {% dincess មាតិកា%} {{Pagetitle}} {{ដាន}} {% endblock%}
នេះគឺជាគំរូដ៏សាមញ្ញបំផុតរបស់យើងប៉ុន្តែនោះហើយជារបៀបដែលងាយស្រួលក្នុងការមើលឃើញកំហុសនៅក្នុងគម្រោងរបស់យើង។ បន្ទាប់សូមចុចការបំបាត់កំហុសនៅក្នុងការកំណត់។# Nano App / Settings.py
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # ស្វែងរកខ្សែនេះដែលវាត្រូវបានកំណត់ជាការពិតហើយប្តូរវាទៅមិនពិត
debug = មិនពិតទៅមុខហើយបម្រុងទុកកម្មវិធីឥឡូវនេះ។ យើងបានត្រៀមខ្លួនរួចរាល់ក្នុងការដាក់ពង្រាយម៉ាស៊ីនមេលីនុចពីចម្ងាយហើយរក្សាទុកនូវលក្ខណៈពិសេសពីទីនោះ។
ការបម្រុងទុកស៊ូដូមុនពេលដែលយើងបញ្ចូលលេខកូដនេះទៅម៉ាស៊ីនមេយើងគួរតែពិចារណាថាអាចមានបញ្ហាមួយចំនួនជាមួយនឹងលេខកូដ។ អាស្រ័យលើករណីដែលទទួលយកព័ត៌មានដែលបានចុះផ្សាយចំពោះពួកគេនឹងមានបញ្ហាជាមួយនឹងសារឥតបានការដែលត្រូវបានចុះផ្សាយនិងការលំបាកក្នុងការដកសារឥតបានការ។ រឿងនេះមិនគួរកើតឡើងភ្លាមៗទេប៉ុន្តែប្រសិនបើវាកំពុងកើតឡើងនៅពេលក្រោយយើងនឹងពិនិត្យមើលថាតើត្រូវពិនិត្យសារឥតបានការក្នុងតំបន់បណ្ដាញនេះហើយធ្វើឱ្យអត្តសញ្ញាណអ្នកប្រើប្រាស់អសកម្មដោយប្រើលេខសម្គាល់របស់ពួកគេឬការស្កេនជីវមាត្រដូចជាស្នាមម្រាមដៃឬការទទួលស្គាល់មុខមាត់។
ការក្រឡេកមើលគំរូនៃការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវជាច្រើនដែលយើងបានពិនិត្យក្នុងផលិតកម្មអ្វីៗអាចខុសគ្នា។ សូមកត់សម្គាល់ពីរបៀបដែលយើងវាយតម្លៃការចូលកំណត់នៃការចូលនិងការផុតកំណត់ថូខឹន។ ប្រសិនបើមនុស្សយន្តកំពុងចូលមើលគេហទំព័រមួយការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវពីរអាចនឹងកាន់តែពិបាកនៅពេលដែលពួកគេអាចបញ្ចូលលេខកូដក្នុងពេលតែមួយដែលអ្នកប្រើគឺ។ ដើម្បីប្រយុទ្ធប្រឆាំងនឹងបញ្ហានេះសូមប្រើគំរូមួយនៅក្នុងម៉ូដែលអ្នកប្រើប្រកាសពីរបៀបដែលយើងធ្វើអន្តរកម្មជាមួយគេហទំព័រនៅពេលដែលយើងកំពុងផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវដោយប្រើលេខទូរស័ព្ទ។ យើងក៏នឹងបន្ថែមជម្រើសមួយដើម្បីផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវជាមួយអ៊ីម៉ែល។ ចាប់ផ្តើមដោយកែសម្រួលម៉ូដែលអ្នកប្រើដោយណាណូ។nano users/views.py
អ្នកប្រើប្រាស់ / ណូណូ / ម៉ូឌែលនេះគឺជាអ្វីដែលគំរូដែលយើងកំពុងបន្ថែមគួរតែមើលទៅ។ យើងមិនត្រូវការវិធីសាស្រ្តណាមួយទេគ្រាន់តែមានអថេរដើម្បីរក្សាទុកលេខសម្គាល់អ្នកប្រើ, ត្រាពេលវេលា, ការផុតកំណត់, និងការព្យាយាមប្រឆាំងនឹងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវជាច្រើន (កូដដូចជា 123456 បានផ្ញើទៅទូរស័ព្ទឬអ៊ីម៉ែល) ។
# ថូខឹនមូលដ្ឋានប្រើដើម្បីចូលគេហទំព័រ ថ្នាក់ Mfatoken (ម៉ូដែល Models.model): អ្នកប្រើប្រាស់ = Models.Forestickey (អ្នកប្រើប្រាស់, នៅលើ on_delete = models.cade, ដែលទាក់ទងនឹងឈ្មោះ = 'mfa_tokens') Timestamp = Models.Datetimefield (លំនាំដើម = Timezone.Now) ផុតកំណត់ = Models.Datetimefield (លំនាំដើម = Timezone.Now) Token = Models.Charfield (លំនាំដើម = '', Max_lity = 100) ប្រវែង = Models.integerfield (លំនាំដើម = 6) ការប៉ុនប៉ង = Models.integerfield (លំនាំដើម = 0) UID = Models.Charfield (លំនាំដើម = uuid.uuid4, Max_lyware = 100)from .email import send_verification_email # ថូខឹនមូលដ្ឋានប្រើដើម្បីចូលគេហទំព័រ
សូមបន្ថែមឯកសិទ្ធិដល់អ្នកប្រើប្រាស់របស់យើងផងដែរហើយយើងនឹងកំណត់វាដោយដៃសម្រាប់ពេលបច្ចុប្បន្ននេះនៅទីបំផុតធ្វើចំណាកស្រុកក្នុងការចុះឈ្មោះអ្នកប្រើប្រាស់ដែលមានឯកសិទ្ធិដោយស្វ័យប្រវត្តិ។ នៅក្នុងម៉ូដែលអ្នកប្រើបន្ថែមបន្ទាត់នេះក្នុងទម្រង់:អ្នកលក់ = Models.boolandfield (លំនាំដើម = មិនពិត)
ដូចគ្នានឹងការផ្លាស់ប្តូរណាមួយចំពោះឃ្លាំងទិន្នន័យដែរយើងត្រូវធ្វើឱ្យធ្វើឱ្យមានការធ្វើចំណាកស្រុកហើយធ្វើចំណាកស្រុកដែលដំណើរការឃ្លាំងទិន្នន័យគ្រប់ពេលដែលយើងកែសម្រួលឯកសារ Models.py នៅ Django ។ សូមចាំថាដើម្បីធ្វើដូចនេះយើងប្រើប្រភពដំបូង (ប្រសិនបើវាមិនត្រូវបានប្រើរួចទៅហើយចាប់តាំងពីស្ថានីយត្រូវបានបើក) ហើយបន្ទាប់មកពស់ថ្លាន់គ្រប់គ្រងការធ្វើចំណាកស្រុកនិងធ្វើចំណាកស្រុក។ថតស៊ីឌី - ថត - អ្នក - ឈ្មោះ # (បើចាំបាច់) ប្រភព Venv / bin / Active Matematigrages គ្រប់គ្រងពស់ថ្លះនិង & គ្រប់គ្រងការធ្វើចំណាកស្រុក
(បើចាំបាច់) # សម្រាប់ពេលនេះអ្នកអាចចុះឈ្មោះគណនីណាមួយដែលអ្នកបានបង្កើតជាអ្នកលក់ដោយប្រើសំបក។
# ពស់ថ្លាន់ម៉ាយធីង
ពីអ្នកប្រើប្រាស់អ៊ីនធឺណេត
p = profoct.objects.get (អ្នកប្រើ _s__username = 'charlotte')
p.vendor = ពិត
P.Save ()
ចេញ ()
# ឥឡូវនេះសូមឱ្យវិវឌ្ឍន៍មើលការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវនៃកត្តាជាច្រើនរបស់យើងដើម្បីប្រើនិមិត្តសញ្ញានេះ។ ដំបូងយើងត្រូវកែប្រែឧបករណ៍ជំនួយ MFA របស់យើង។ ការប្រើប្រាស់ណាណូ,
អ្នកប្រើប្រាស់ណាណូ / MFA.PYពី Django.utils នាំចូល Tenzone នាំចូល នាំចូលចៃដន្យ នាំចូលទិន្នន័យ ពីការកំណត់នាំចូល Django.conf ពី Feed.Midderware នាំចូល Get_current_request ពី Django.Contrib នាំចូលសារនាំចូល ពី។ ការនាំចូល Assemail Man Send_html_email នាំចូល Traceback ពី .models នាំចូល Mfatoken គណនេយ្យ _sid = setting.twilio_acccount_sid auth_token = settings.twilio_auth_token ប្រភពដើម --phone = settings.phone_number def ផ្ញើ read_text (preate_phone, អត្ថបទ): អតិថិជននាំចូល Twilio.REST សាកល្បង: អតិថិជន = អតិថិជន (គណនេយ្យ _sid, Auth_Token) ប្រសិនបើលេន (គោលដៅ)> = 11: សារ = អតិថិជន .messages.create ( ដើម្បី = PRITET_PAPAP, ពី _ = ប្រភពធនធាន, រាងកាយ = អត្ថបទបញ្ឈប់ការបោះបង់ចោល។ ') លើកលែងតែ: សារ បោះពុម្ព (Traceback.Format_exc ()) def get_num_lengative (Num, ប្រវែង): n = '' សម្រាប់ x នៅក្នុងជួរ (ប្រវែង): n = n + str (លេខ) ត្រឡប់ int (n) Def Send_verification_Text (អ្នកប្រើប្រាស់, ថូខឹន): ប្រវែង = user.profile.verific_code_lenglegy លេខកូដ = ចៃដន្យ .randint (Get_num_lengeg (1 ប្រវែង), Get_num_lengpth (9, ប្រវែង 9,)); token.token = កូដ token.expires = Timezone.Now () + Datetime.timeDelta (នាទី = Settings.valid_minute) token.save () ផ្ញើ - ផ្ញើ _USERTEXT (អ្នកប្រើប្រាស់ "លេខកូដផ្ទៀងផ្ទាត់របស់អ្នកសម្រាប់ {} គឺ {}" ។ ទ្រង់ទ្រាយ (setting.site_name, ret (កូដ)))) def ផ្ញើ is_verication_email (អ្នកប្រើប្រាស់, ថូខឹន): ប្រវែង = user.profile.verific_code_lenglegy លេខកូដ = ចៃដន្យ .randint (Get_num_lengeg (1 ប្រវែង), Get_num_lengpth (9, ប្រវែង 9,)); token.token = កូដ token.expires = Timezone.Now () + Datetime.timeDelta (នាទី = Settings.valid_minute) token.save () Send_html_email (អ្នកប្រើប្រាស់ "លេខកូដផ្ទៀងផ្ទាត់របស់អ្នកសម្រាប់ {}" ។ ទ្រង់ទ្រាយ (} អ។ ស។ អ។ str (លេខកូដ), setting.site_name)) Def Send_USer_Text (អ្នកប្រើប្រាស់អត្ថបទ): ផ្ញើ _ ឯកសារ (user.profile.pass_number អត្ថបទ) def ការពិនិត្យសុខភាព token.attempts = token.attempts + 1 ទម្រង់ = user.profile លទ្ធផល = (និមិត្តសញ្ញា! = គ្មាននិងលេខកូដ! = '' '' និង token.token == លេខកូដនិង (Token.Expires> Token.ateSts <= setting.atoken_atoken_atoken_atoken_atoken_atoken_atoken_atoken_atoken_atoken_atoketss) ប្រសិនបើ Token.attempts <3 និងលទ្ធផល: profciation.verification_code_len_le = 6 isif token.attempts> 1 ហើយមិនមែនជាលទ្ធផល: Profciation.verification_code_leny = profirecient.verificate_lede_lengle + 2 ប្រសិនបើ Profile.Veode_code_lengy> settings.mfa_token_lemen.ly token.save () ទម្រង់ () លទ្ធផលត្រឡប់មកវិញ
# ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវអ្នកប្រើប្រាស់ដោយប្រើអ៊ីមែលឬលេខទូរស័ព្ទរបស់ពួកគេ Def Mfa (សំណើរឈ្មោះអ្នកប្រើ, usertishen): Token = MFatoken.objects.Filter ឈ្មោះអ្នកប្រើផុតកំណត់__YGT = Timeetime.TimEdam (វិនាទី) ។ ប្រសិនបើមិនមាននិមិត្តសញ្ញា: Token = MFatoken.Objecte (អ្នកប្រើប្រាស់ = user__uuid = ឈ្មោះអ្នកប្រើ = Timetetime.TimEdelta (115)) # អ្នកប្រើប្រាស់ = user.objects.filter (លេខសម្គាល់ = token.user.id) .first () # ទទួលបានអ្នកប្រើប្រាស់ពីនិមិត្តសញ្ញា ប្រសិនបើមិនមានអ្នកប្រើនិង ett.user.is_authenticate: ការប្តូរទិសត្រឡប់មកវិញ (បញ្ច្រាស ('ចំណី: ហូមៈទំព័រដើម')) # ប្រសិនបើពួកគេបានផ្ទៀងផ្ទាត់រួចហើយសូមកត់ត្រាវាចូល ប្រសិនបើមិនមានអ្នកប្រើ: ការដំឡើងសិទ្ធិ () # បដិសេធប្រសិនបើគ្មានអ្នកប្រើត្រូវបានរកឃើញ បន្ទាប់ = instem.Get.Get (បន្ទាប់ 'បន្ទាប់' ') ប្រសិនបើមិនប្រើ user.enofile.enable_two_fortation និង user.is_actic និង user.profile.check_tok_token (usertoken): # ពិនិត្យមើល Authen auth_login (សំណើអ្នកប្រើ backend = 'django.contrib.auth.3Eds.modelbenbendend') # ចូលអ្នកប្រើប្រាស់ប្រសិនបើពួកគេមិនទាន់បានចូល អ្នកប្រើ user.profile.save () ត្រឡប់ httpenponseredired (បន្ទាប់ប្រសិនបើមានបន្ទាប់! = '' បញ្ច្រាសបញ្ច្រាស ('ការចុះចត: ចុះចត'))) # ប្តូរទិស ') # ប្តូរទិសអ្នកប្រើទៅទំព័របន្ទាប់ ប្រសិនបើមិនប្រើ user.profile.mfa_enabled: # ពិនិត្យមើលថាតើ MFA ត្រូវបានបើកទេ ប្រសិនបើមិនពិគ្រោះយោបល់ -Verification_time (អ្នកប្រើសញ្ញានិមិត្តសញ្ញា): # ពិនិត្យមើលពេលវេលា user.profile.mfa_enabled = FALSH # សម្អាតលេខទូរស័ព្ទ user.profile.enable_two_fortace_authentication = ពិត # បើក MFA user.profile.phone_number '=' +1 '# បិទលេខទូរស័ព្ទ user.profile.save () # រក្សាទុកទម្រង់ auth_login (សំណើអ្នកប្រើ backend = 'django.contrib.auth.packends.modelbenbendend') # អ្នកប្រើចូលប្រសិនបើ MFA របស់ពួកគេមិនត្រូវបានអនុញ្ញាត សារ។ សូមបញ្ចូលលេខទូរស័ព្ទដែលមានសុពលភាពហើយផ្ទៀងផ្ទាត់វាដោយប្រើលេខកូដ។ ') ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('អ្នកប្រើ: mfa_onboard')) ប្រសិនបើសំណូមពរ ទម្រង់ = tfafform (infight.post) #) #) #) #) លេខកូដ = Str (Form.Data.Get ('លេខកូដ' គ្មាន)) # ទទួលបានលេខកូដ ប្រសិនបើលេខកូដនិងលេខកូដ! = '' និងកូដ! = គ្មាន: # ត្រូវប្រាកដថាវាមិនទទេទេ token_vaidated = user.profile.check_auth_token (usertoken) # ពិនិត្យឡើងវិញនូវនិមិត្តសញ្ញានិមិត្តសញ្ញា p = user.profile is_verified = chistr_verific_code (អ្នកប្រើប្រាស់ថូខឹនលេខកូដ) # ពិនិត្យមើលលេខកូដ p.mfa_authenticate = is_verified ប្រសិនបើ token_vidated: # ប្រសិនបើអ្វីៗទាំងអស់ ប្រសិនបើ is_verified: # គឺស្ថិតនៅក្នុងលំដាប់ user.profile.mfa_enabled = ពិត # បើក MFA (ប្រសិនបើមិនបានបើកដំណើរការរួចហើយ) user.profile.save () auth_login (សំណើអ្នកប្រើ backend = 'django.contrib.auth.3Ets.modelbendend') # ចូលអ្នកប្រើ មុខ = user.faces.filter (session_key = គ្មាន) .last () P.MFA_EXPIPES = Timezone.Now () + Datetime.timedEdelta (នាទី = Settings.login_valid_mines) P.Save () សារ .scess (សំណើរសុំ 'អ្នកត្រូវបានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ។ សូមស្វាគមន៍។ ') QS = '?' សម្រាប់កូនសោតម្លៃក្នុងការស្នើសុំ។ GetGet.items (): # បង្កើតការជ្រើសរើសសំណួរសម្រាប់ប៉ារ៉ាម៉ែត្របន្ទាប់ (បើមាន) QS = Qs + គ្រាប់ចុច + '=' + តម្លៃ + '&' ប្រសិនបើមានបន្ទាប់! = '' ហើយមិន (Next.startswith ('គណនី / lowout /' បន្ទាប់) ឬ NextArtswith ('/' options.startswith ('/' instart.startswith ('គណនី /' ចុះឈ្មោះ / ')): ត្រឡប់ httpesponserediredired (បន្ទាប់) # បញ្ជូនបន្ត ELIF បន្ទាប់ .startsswith ('គណនី / lovout /' ') ឬ NextArtArtswith (' / គណនី / ចូល / ') ឬបន្ទាប់។ ប្តូរទិសត្រឡប់ (បញ្ច្រាស ('/')) ELIF stim.meta.get ('http_referer', '/' ''s.startsswith(/ACCOUTS/LOGIN/'): ប្តូរទិសត្រឡប់ (បញ្ច្រាស ('/')) elif មិនបន្ទាប់ទេ: ប្តូរទិសត្រឡប់ (បញ្ច្រាស ('/')) ផ្សេងទៀត: ត្រឡប់ HTTPRESEREDIREEDIRED (បញ្ច្រាស ('ផ្ទៀងផ្ទាត់: age') + '' បន្ទាប់ = 'បន្ទាប់ =' + សំណើ .meta.get ('http_referer', '/')) ផ្សេងទៀត: សារ។ ការស្នើសុំ "លេខកូដដែលអ្នកបានបញ្ចូលមិនត្រូវបានទទួលស្គាល់ទេ។ សូមព្យាយាមម្តងទៀត។ ') elif មិន token_vidated: # ប្រសិនបើថូខឹនមិនត្រឹមត្រូវ សារ .warning (សំណើរ "The URL Token បានផុតកំណត់ឬមិនត្រូវបានទទួលស្គាល់។ សូមព្យាយាមម្តងទៀត។ ') ការចាកចេញ (សំណើ) ការប្តូរទិសត្រឡប់ (បញ្ច្រាស ('អ្នកប្រើប្រាស់: ចូល')) ប្រសិនបើ p.mfa_attempts> 3: # ប្រសិនបើមានការប៉ុនប៉ងច្រើនពេក សារ .warning (សំណើររបស់អ្នកបានបញ្ចូលលេខកូដមិនត្រឹមត្រូវជាង 3 ដង។ សូមផ្ញើខ្លួនអ្នកនូវលេខកូដថ្មីមួយ។ ') p.verifical_code = គ្មាន P.Save () ELIF user.profile.can_send_mfa <Timzhone.Now (): user.profile.mfa_attempts = 0 user.profile.can_send_mfa = timezone.now () + Datetime.TimEdeTal (នាទី = 2) user.profile.save () ប្រសិនបើ Form.Data.Get ('Send_email', មិនពិត): # ផ្ញើអ៊ីមែល (ឬអត្ថបទ) ផ្ញើ _mfa_verication_email (អ្នកប្រើប្រាស់, ថូខឹន) ផ្សេងទៀត: ផ្ញើ - ផ្ញើ _ utext_text (អ្នកប្រើប្រាស់, និមិត្តសញ្ញា) សារ (ស្នើសុំ "សូមបញ្ចូលលេខកូដដែលបានផ្ញើទៅលេខទូរស័ព្ទឬអ៊ីមែលរបស់អ្នក។ លេខកូដនឹងផុតកំណត់ក្នុងរយៈពេល 3 នាទី។ ") ELIF elber.profile.can_send_mfa <Timzhone.Now <Timzhone.Now () + Datetime.timEdelta (វិនាទី = 115): សារ។ អ្នកកំពុងផ្ញើលេខកូដផ្ទៀងផ្ទាត់កត្តាពីរយ៉ាង។ រង់ចាំពីរបីនាទីមុនពេលផ្ញើកូដផ្សេងទៀត។ ') ទម្រង់ = tfafaform () hide_logo = គ្មាន ប្រសិនបើ user.profile.hide_logo: hide_logo = ពិត ប្រសិនបើ Net.User.is_authenticate: ប្តូរទិសត្រឡប់ (បញ្ច្រាស ('/')) # បង្ហាញទម្រង់បែបបទ (សម្រាប់ការស្នើសុំ) ការត្រឡប់មកវិញបង្ហាញ (សំណើរ "អ្នកប្រើប្រាស់ / mfa.html ',' incom កូដ ':' hold_logo ': usefallogo_tooado': 'autofocus': actofofogo ': សំណើរnano users/views.py
ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវអ្នកប្រើដោយប្រើអ៊ីមែលឬលេខទូរស័ព្ទរបស់ពួកគេ# ច្រោះនិមិត្តសញ្ញាដោយតម្លៃដែលបានឆ្លងកាត់នៅក្នុង URL (UUID)
# ប្រសិនបើវេននេះមិនត្រូវបានបង្កើតបង្កើតវាទេ
ទទួលអ្នកប្រើប្រាស់ពីនិមិត្តសញ្ញាប្រសិនបើពួកគេត្រូវបានផ្ទៀងផ្ទាត់រួចហើយសូមកត់ត្រាវា
បដិសេធប្រសិនបើរកមិនឃើញអ្នកប្រើ# ពិនិត្យមើលនិមិត្តសញ្ញារបស់អ្នកនិពន្ធ
send_verification_email(user) # ចូលអ្នកប្រើប្រសិនបើពួកគេមិនទាន់បានចូលទេ
កំណត់ពេលវេលាផុតកំណត់នៅលើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវជាច្រើនរបស់ពួកគេប្តូរទិសអ្នកប្រើប្រាស់ទៅទំព័របន្ទាប់
ពិនិត្យមើលថាតើ MFA ត្រូវបានបើក# ពិនិត្យពេលវេលា
ជម្រះលេខទូរស័ព្ទបើក MFA
បិទលេខទូរស័ព្ទnano users/templates/users/resend_activation.html
រក្សាទុកទម្រង់log អ្នកប្រើចូលប្រសិនបើ MFA របស់ពួកគេមិនត្រូវបានអនុញ្ញាត
ប្រសិនបើការស្នើសុំគឺជាសំណើក្រោយ
ទម្រង់បែបបទភ្លាមៗទទួលបានលេខកូដ
ត្រូវប្រាកដថាវាមិនទទេទេdef sendwelcomeemail(user):
User = get_user_model()
html = open('{}/users/welcome_email.html'.format(settings.BASE_DIR)).read()
subject = 'Welcome to ' + settings.SITE_NAME + ', {{ username }}!'
template = Template(html)
subjtemplate = Template(subject)
context = Context({'username': user.username, 'base_url': settings.BASE_URL, 'model_name': 'Daisy Holton, 'site_name': settings.SITE_NAME})
renderedtemplate = template.render(context)
subjcontext = Context({'username': user.username})
subjrenderedtemplate = subjtemplate.render(subjcontext)
send_html_email(user, subjrenderedtemplate, renderedtemplate)
ពិនិត្យមើលនិមិត្តសញ្ញារបស់អ្នកនិពន្ធពិនិត្យលេខកូដ
ប្រសិនបើអ្វីៗទាំងអស់
គឺស្ថិតនៅក្នុងលំដាប់បើកដំណើរការ MFA (ប្រសិនបើមិនបានបើកដំណើរការរួចហើយ)
ចូលអ្នកប្រើបង្កើតការជ្រើសរើសសំណួរសម្រាប់ប៉ារ៉ាម៉ែត្របន្ទាប់ (បើមាន)
រេកាប្រសិនបើនិមិត្តសញ្ញាមិនត្រឹមត្រូវ
ប្រសិនបើមានការប៉ុនប៉ងច្រើនពេក# ផ្ញើអ៊ីមែល (ឬអត្ថបទ)
បង្ហាញទម្រង់បែបបទ (សម្រាប់ការស្នើសុំ)នៅពេលដែលយើងកំពុងបន្ថែមលេខកូដនេះត្រូវប្រាកដថានាំចូលមុខងារនេះដើម្បីផ្ញើអ៊ីមែល។ នៅផ្នែកខាងលើនៃឯកសារការមើលអ្នកប្រើ (ជាមួយការនាំចូលផ្សេងទៀត) បន្ថែម
ពី .mfa នាំចូល Send_verication_email ដូចជាការផ្ញើ
ឥឡូវនេះយើងត្រូវសរសេរមុខងារនោះមុនពេលណាមួយនេះនឹងដំណើរការ។ វាគួរតែពន្យារមុខងារផ្ញើអ៊ីមែលរបស់យើងហើយគ្រាន់តែផ្ញើអ៊ីមែលទៅអ្នកប្រើដោយប្រើលេខកូដផ្ទៀងផ្ទាត់។អ្នកប្រើប្រាស់ណាណូ / MFA.PY
def ផ្ញើ is_verication_email (អ្នកប្រើប្រាស់, ថូខឹន): ប្រវែង = user.profile.verific_code_lenglegy លេខកូដ = ចៃដន្យ .randint (Get_num_lengeg (1 ប្រវែង), Get_num_lengpth (9, ប្រវែង 9,)); token.token = កូដ token.expires = Timezone.Now () + Datetime.timeDelta (នាទី = Settings.valid_minute) token.save () Send_html_email (អ្នកប្រើប្រាស់ "លេខកូដផ្ទៀងផ្ទាត់របស់អ្នកសម្រាប់ {}" ។ ទ្រង់ទ្រាយ (} អ។ ស។ អ។ str (លេខកូដ), setting.site_name))
ដូច្នេះវាដំណើរការដ៏អស្ចារ្យឥឡូវនេះយើងមានប្រព័ន្ធផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវជាច្រើនដែលអាស្រ័យលើលេខទូរស័ព្ទឬអ៊ីមែលដើម្បីចូល។ ប៉ុន្តែយើងក៏ត្រូវការវិធីមួយដើម្បីដកចេញឬយ៉ាងហោចណាស់លាក់អ្នកប្រើប្រាស់ដែលមិនសហការជាមួយលក្ខខណ្ឌរបស់យើង។ ទាំងនេះអាចជាអ្នកផ្ញើសារឥតបានការរ៉ូបូតឬអ្នកដែលមិនមានន័យល្អសម្រាប់ការងាររបស់យើង។ សូមមើលទស្សនៈមួយដែលខ្ញុំមានសម្រាប់ត្រួតពិនិត្យអ្នកប្រើប្រាស់នៅលើគេហទំព័ររបស់ខ្ញុំ:# ការនាំចូល ពី Django.contrib.auth.DORUTARE នាំចូល login_reque ពី Django.contrib.auth.DORUTATOMAMATHOM នាំចូល Usluse_passes_test ពី។ ការនាំចូល។ ការនាំចូល Is_superuser_or_vendor # យើងនឹងត្រូវការបង្កើតការធ្វើតេស្តនេះ @login_required @USer_Passes_test (is_superuser_or_vendor) អ្នកប្រើប្រាស់ Def (ការស្នើសុំ): # ទទួលបានបញ្ជីអ្នកប្រើប្រាស់ New_Today = user.objects.Filter = TRATE, កាលបរិច្ឆេទ _joined__gte__gte = Timezone.Now () - Datetime.TimEdeTelta (24)) ។ ចំនួន () New_this_month = user.objects.Filter = កាលបរិច្ឆេទ _joined__gte__gte = Timezone.Now () - Datetime.TimEdeTal (24 * 30)) ។ រាប់ () អតិថិជន = user.objects.filter (iS_ARD = TRUE, ទម្រង់ _Subscribed = ពិត) .count () ត្រឡប់ការបង្ហាញ (សំណើរ, 'អ្នកប្រើប្រាស់ / អ្នកប្រើប្រាស់ .html', {# ប្រគល់ឱ្យអ្នកប្រើប្រាស់ត្រឡប់មកវិញក្នុងពុម្ព 'ចំណងជើង': 'គណនីទាំងអស់' 'អ្នកប្រើប្រាស់': user.objects.all (), 'ថ្មី _TODay': ថ្មី: 'new_this_month': ថ្មី _this_month, អតិថិជនរបស់អតិថិជន: អតិថិជន })
ការនាំចូល
យើងនឹងត្រូវបង្កើតការធ្វើតេស្តនេះទទួលយកបញ្ជីអ្នកប្រើប្រាស់
ប្រគល់អ្នកប្រើប្រាស់នៅក្នុងពុម្ព
ចំណាំថាកូដនេះប្រើតេស្តនេះយើងត្រូវប្រកាសការធ្វើតេស្តនេះនៅក្នុងឯកសារសាកល្បង .py ហើយនាំចូលវា។ ការកែសម្រួលអ្នកប្រើប្រាស់ / TextS.T.S.TAS. សូមបង្កើតការធ្វើតេស្តនេះ។def_superuser_or_vendor (អ្នកប្រើប្រាស់): ត្រឡប់ user.profile.vendor ឬ user.is_superuser
នេះគឺនៅក្នុងការភ្ជាប់ជាមួយអ្នកប្រើប្រាស់ / ទំព័រគំរូអ្នកប្រើប្រាស់ .html ដែលមើលទៅអ្វីមួយដូចនេះ:
{% ពង្រីក 'basic.html'%}
{% ផ្ទុកកម្មវិធី --filters%}
{% dincess មាតិកា%}
អ្នកទស្សនាដែលបានចុះឈ្មោះទាំងអស់
{{ new_today|nts|capitalize }} new today, {{ new_this_month|nts }} new this month, {{ subscribers|nts }} subscribers, {{ users.count|nts }} total.
{% សម្រាប់អ្នកប្រើក្នុងអ្នកប្រើប្រាស់%}
{% បញ្ចូល 'អ្នកប្រើ / _user.html'%}
{% endfor%}
{% endblock%}user.html ។ នៅពេលប្រើគំរូដែលមានផ្ទុកសញ្ញារងនិងមិនប្រើពង្រីកដែលជាគំនិតល្អក្នុងការបន្ថែមសញ្ញាគូសក្រោម (
ចំណាំថានេះគឺជាជិងចាអ្នកប្រហែលជាមិនមានអថេរទាំងអស់នេះដែលបានកំណត់ទេ។ ប៉ុន្តែនេះគឺជាអ្វីដែលក្រឹត្យរបស់ខ្ញុំមើលទៅដូច។ # {% ផ្ទុកកម្មវិធី --filters%}
@{{ user.username }} - {{ user.profile.name }} ({{ user.profile.preferred_name }})
បានឃើញចុងក្រោយ {{@ us.profile.last_seen | កាលបរិច្ឆេទ: "F D, y"}} {{{{{{{{{{{{{{{{} ម៉ោង:}}
បានចូលរួម {{@ us.profile.date_joined | កាលបរិច្ឆេទ: "F D, Y"}} {{{{{{{{{{{{{{joined | ម៉ោង: "H: I"}}
{{អ្នកប្រើប្រាស់។
{% ប្រសិនបើ user.profile.phone_number% {{{{{{{% indifif} {% endifife%}
{% ប្រសិនបើ user.verifics.last%}
'{{{{{us.ver.last.fult.full_name}}'
{{upy.ver.last.document_number}}
{{up us.ver.last.birthdate}}
ផ្នែកខាងមុខលេខសម្គាល់
លេខសម្គាល់ត្រឡប់មកវិញ
{% endif%}
# {{@ us.id}}
{% ប្រសិនបើ user.profile.subscribed%} បានជាវ% {% undifed%}
{% ប្រសិនបើមិន user.is_superuser%}
{% រាប់បញ្ចូល 'អ្នកប្រើ / បិទ / បិទបើក -% sc'%}
{% endif%}
{% autoescape ចេញពី%}
{{upy.bio}}
{% endaut/ceScape%}
{% ប្រសិនបើ user.profile..tettity_verified%} អ្នកប្រើប្រាស់%} អ្នកប្រើប្រាស់ដែលមិនបានបញ្ជាក់
{{@ us.id}}}}យើងក៏ត្រូវការ intemprate ផ្សេងទៀត, បិទបើក, បើក - Predactive.HTML ។ គំរូនេះគួរតែជាទម្រង់មួយដែលអនុញ្ញាតឱ្យយើងបិទបើកថាតើអ្នកប្រើប្រាស់សកម្ម។
{% ប្រសិនបើ use.is_ACT%} {% ផ្សេងទៀត%} {% endif%}យើងក៏ត្រូវបន្ថែមមើលដើម្បីបិទ / បើកសកម្មភាពអ្នកប្រើនិងលំនាំ URL ដែលសមស្រប។ ខណៈពេលដែលយើងនៅវា, សូមបន្ថែមទិដ្ឋភាពដើម្បីលុបអ្នកប្រើក្នុងករណីដែលយើងត្រូវការវា។
ពី Django.views.decorator.csffrf នាំចូលស៊ីអេសអេហ្វអេហ្វអេហ្វ @csrf_exetempret @login_required @USer_Passes_test (is_superuser_or_vendor) Def Toggle_US_US_ARD (សំណើរ PK): អ្នកប្រើប្រាស់ = user.objects.Get (លេខសម្គាល់ = ភីខេ) ប្រសិនបើសំណើ .method == 'ប្រកាស': user.is_active = មិន user.is_Aced user.save () ត្រឡប់ httprepse ('' 'ប្រសិនបើ use.is_active ផ្សេងទៀត' ') # ការនាំចូល ពី Django.contrib.auth.mixins នាំចូល LogeReRieSquiredmixin, userpasestestmixin ពី Django.views.generic ការនាំចូលការនាំចូល usica losiceDeleTeView (LogeReRequiredmixin, userPaseStestmixin, Deleteview): ម៉ូដែល = អ្នកប្រើប្រាស់ Fund_url = '/' # ការប្តូរទិសនៅលើ URL ជោគជ័យ def get_context_data (ខ្លួនឯង, ** kwargs): បរិបទ = Super () ។ Get_context_data (** KWargs) ត្រឡប់បរិបទ Def Test_func (ខ្លួនឯង): # សាកល្បងប្រសិនបើអ្នកប្រើប្រាស់គឺជាអ្នកប្រើជាន់ខ្ពស់ហើយមានការអនុញ្ញាតឱ្យលុប អ្នកប្រើ = Self.Get_Object () ប្រសិនបើខ្លួនឯង .request.user! = អ្នកប្រើប្រាស់និងអ្នកប្រើ .request.user.is_superuser: ត្រឡប់ពិត ត្រឡប់មិនពិតការនាំចូល
ការបញ្ជូនបន្តផ្អែកលើ URL ជោគជ័យ# សាកល្បងប្រសិនបើអ្នកប្រើប្រាស់គឺជាអ្នកប្រើជាន់ខ្ពស់ហើយមានការអនុញ្ញាតឱ្យលុប
# ខណៈពេលដែលនេះមានការអនុវត្តជាក់ស្តែងនៅពេលចាំបាច់ការលុបអ្នកប្រើប្រាស់មិនចាំបាច់ចាំបាច់ភាគច្រើនទេឥឡូវនេះយើងអាចបិទ / បើកភាពមើលឃើញរបស់អ្នកប្រើប្រាស់ដែលមកលេងគេហទំព័រប្រសិនបើយើងត្រូវការបណ្តេញពួកគេ។
# លំនាំ URL ដែលយើងបានបន្ថែមមើលទៅដូចនេះ។ ជាមួយណាណូ, កែសម្រួលអ្នកប្រើប្រាស់ / urlss.py និងបន្ថែមបន្ទាត់ទាំងនេះ:
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # អ្នកប្រើប្រាស់ណាណូ / urls.py
បន្ទាត់គួរតែចូលក្នុងបញ្ជីផ្លូវក្នុងការមើលអ្នកប្រើមុនពេលចប់ "] ប៉ុន្តែបន្ទាប់ពីការចាប់ផ្តើម" ["។# ... PATH ('អ្នកប្រើប្រាស់ / user del userateiewiewiewiewiewiewiewiewiewiew ((((((con ((conconconconconconhirmirmh)'))))))))))))))))))))))))) user) ផ្លូវ ('អ្នកប្រើ // សកម្ម /', views.toggle_user_Art ឈ្មោះ = 'បិទ / បើកដោយអ្នកប្រើ ") # ...
...source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
...ឥឡូវត្រូវប្រាកដថាបម្រុងទុកគេហទំព័រដូច្នេះអ្នកអាចទាញយកវានៅលើម៉ាស៊ីនមេគេហទំព័រដែលយើងនឹងបន្តធ្វើការ។ ពីបន្ទាត់ពាក្យបញ្ជា,
ការបម្រុងទុកស៊ូដូឥឡូវគេហទំព័ររបស់យើងបានបម្រុងទុក។
ដូច្នេះឥឡូវនេះយើងមានមុខងារមានប្រយោជន៍មួយចំនួនទៀត។ ប៉ុន្តែចុះយ៉ាងណាចំពោះរូបភាពធំនៅទីនេះ? This code still isn't accessible from the internet, we have no mail server yet, and we need to expand our app to include comprehensive verification process as well as smooth layouts to help us explore the site, along with secure protocols for authenticating privileged users.# យើងនឹងទទួលបានទាំងអស់នេះ។ អ្វីដែលសំខាន់បំផុតសម្រាប់ពេលនេះនឹងគ្រាន់តែទទួលបានលេខកូដនេះតាមអ៊ិនធរណេតដែលយើងអាចធ្វើបានដោយគ្រាន់តែមានរបាំងពីរបីខ្សែនៅលើម៉ាស៊ីនមេអ៊ូប៊ុនទូ។ អ្នកនឹងត្រូវការជួលម៉ាស៊ីនមេសម្រាប់បញ្ហានេះលើកលែងតែអ្នកមានម៉ាស៊ីនមេនៅផ្ទះនិងការជាវសេវាអ៊ីនធឺណិតអាជីវកម្មដែលអនុញ្ញាតឱ្យអ្នកបើកកំពង់ផែ។ ខ្ញុំបានដំណើរការគេហទំព័ររបស់ខ្ញុំនៅលើ HP Z440 ដែលត្រូវបានតំឡើងនៅក្នុងផ្ទះល្វែងរបស់ខ្ញុំប៉ុន្តែជាធម្មតាវាមានតម្លៃថោកជាងសម្រាប់តម្រូវការមូលដ្ឋានក្នុងការជួលម៉ាស៊ីនមេឯកជននិម្មិត (VPS) ។
if user and user.profile.can_login < timezone.now(): # សូមចងចាំថាលេខកូដដែលយើងកំពុងដំណើរការឥឡូវនេះមានស្តើងណាស់វាចាំបាច់ត្រូវរក្សាទុកនិងកែលម្អមុនពេលយើងត្រៀមខ្លួនប្រើអ្វីដែលយើងត្រូវបង្កើតផលិតផល។ ត្រូវប្រាកដថាត្រូវប្រុងប្រយ័ត្ននូវអ្វីដែលអ្នកធ្វើជាមួយអ៊ីនធឺណិតត្រូវប្រាកដថាប្រសិនបើអ្នកដាក់ពង្រាយគេហទំព័រនេះជាសាធារណៈទៅគេហទំព័រនៅលើលីនុចអ្នកមានផែនការរារាំងអន្តរកម្មដែលមិនចង់បានជាមួយគេហទំព័ររបស់អ្នក។ នេះទំនងជាមិនមានបញ្ហាទេប៉ុន្តែយើងនឹងពិនិត្យមើលដំណោះស្រាយផ្សេងៗគ្នាដើម្បីប្រយុទ្ធប្រឆាំងនឹងការរៀនម៉ាស៊ីនភាពវៃឆ្លាតសិប្បនិម្មិតនិងចក្ខុវិស័យកុំព្យូទ័រ។ នៅពេលដែលវាក្លាយជាបញ្ហាសូមមើលអត្ថបទនេះបន្ថែមទៀតសម្រាប់ដំណោះស្រាយ។
# បើនិយាយពីការជួល VPS មានកន្លែងជាច្រើនដែលអ្នកអាចទៅបាន។ Google Cloud មានម៉ាស៊ីនបម្រើ VPS, អាយអូប, Kamatera, ក្រុមហ៊ុន Amazon AWS ហើយអ្នកផ្តល់សេវាជាច្រើនទៀតផ្តល់ជូននូវដំណោះស្រាយម៉ាស៊ីនមេ Cloud ដែលនឹងត្រូវនឹងតម្រូវការរបស់យើង។
return redirect(user.profile.create_auth_url()) # អ្នកត្រូវចុចតាមរយៈទម្រង់របស់ពួកគេហើយជ្រើសរើសគំរោងមួយដើម្បីចាប់ផ្តើម។ អ្នកអាចទៅជាមួយផែនការមូលដ្ឋានជាមួយអ្នកផ្តល់សេវាណាមួយប៉ុន្តែត្រូវប្រាកដថាអ្នកផ្តល់សេវាអនុញ្ញាតឱ្យអ្នកបើកច្រកម៉ាស៊ីនបម្រើសំបុត្រសំបុត្រដើម្បីផ្ញើអ៊ីមែល (នេះគួរតែជាកំពង់ផែ 587 និងកំពង់ផែ 25) អ្នកផ្តល់សេវាមួយចំនួនរារាំងកំពង់ផែទាំងនេះ។ រហូតមកដល់ពេលនេះខ្ញុំមានបទពិសោធល្អបំផុតជាមួយអាយអូតូនិង Kamatera ពួកគេទាំងពីរនឹងអនុញ្ញាតឱ្យខ្ញុំផ្ញើអ៊ីម៉ែលគ្មានដែនកំណត់ហើយតម្លៃរបស់ពួកគេគឺថោកណាស់។
else: # អ្នកនឹងភ្ជាប់ទៅម៉ាស៊ីនមេថ្មីរបស់អ្នកនៅលើពិធីសារដែលគេហៅថាសែលអេសអេសឬសែលដែលអាចឱ្យអ្នកមានចំណុចប្រទាក់ពីចម្ងាយជាមួយម៉ាស៊ីនមេរបស់អ្នកពីកុំព្យូទ័រផ្ទាល់ខ្លួនរបស់អ្នកពីកុំព្យូទ័រផ្ទាល់ខ្លួនរបស់អ្នក។ នៅពេលអ្នកតំឡើងម៉ាស៊ីនមេអ្នកផ្តល់សេវាបង្ហោះទំនងជានឹងស្នើសុំឱ្យអ្នកបន្ថែមកូនសោ SSH ឬពួកគេនឹងផ្តល់ឱ្យអ្នកនូវឈ្មោះអ្នកប្រើនិងពាក្យសម្ងាត់។ គ្រាប់ចុច SSH គឺជារបៀបដែលអ្នកនឹងចូលម៉ាស៊ីនមេពីបន្ទាត់ពាក្យបញ្ជាដើម្បីកែសម្រួលកូដ។ ប្រើជម្រើស SSH-Keygen ខាងក្រោមដើម្បីបង្កើតកូនសោ SSH ។
else: # ssh-keygen
user = User.objects.filter(username=username).first() # រក្សាទុកឯកសារនិងសរសេរជាន់លើវាប្រសិនបើអ្នកត្រូវការវាជាការល្អក្នុងការបង្វិលគ្រាប់ចុច SSH របស់អ្នកប្រសិនបើអ្នកមិនទាន់មាន។ ឥឡូវអ្នកអាចប្រើពាក្យបញ្ជាខាងក្រោមដើម្បីមើលគ្រាប់ចុច SSH របស់អ្នក។ អ្នកនឹងចង់ចម្លងវាទៅម៉ាស៊ីនបម្រើពីចម្ងាយរបស់អ្នកដូច្នេះអ្នកអាចប្រើវាដើម្បីផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ។
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # ឆ្មា ~ / .ssh / id_rsa.pub
ប្រសិនបើអ្នកមិនអាចមើលឃើញគ្រាប់ចុច SSH នៅពេលវាយពាក្យបញ្ជានោះ (ខ្សែអក្សរនិងអក្សរវែងដែលចាប់ផ្តើមដោយ "ssh-rsa aaa") សូមព្យាយាមបង្កើតកម្មវិធីអេសអេសអេសអេស។ssh-keygen -t rsa -b 4096
បង្កើត VPS ដែលកំពុងដំណើរការអ៊ូប៊ុនទូទោះយ៉ាងណាអ្នកមានគម្រោងធ្វើរឿងនេះ។ នៅពេលដែលអ្នកបានបង្កើត VPS ដោយចុចតាមរយៈទម្រង់នៅលើគេហទំព័រអ្នកផ្តល់សេវា (Kamatera.com ឬស្រដៀងគ្នា) អ្នកនឹងចង់ចូល។ អ្នកក៏ត្រូវមានភាពរសើបទៅនឹងឈ្មោះអ្នកប្រើលំនាំដើមនៅលើម៉ាស៊ីនមេដែលយើងបានបង្កើតឧទាហរណ៍អ៊ូប៊ុនទូ។ssh ubuntu@xx.xx.xx.xx.xx.xxx
អ្នកអាចត្រូវបានគេស្នើសុំពាក្យសម្ងាត់ប្រសិនបើអ្នកត្រូវបានគេស្នើសុំពាក្យសម្ងាត់សូមបញ្ចូលវាចូល។ យើងនឹងមិនប្រើឈ្មោះអ្នកប្រើលំនាំដើមដូច្នេះសូមចាប់ផ្តើមដោយការបង្កើតអ្នកប្រើថ្មីនិងបន្ថែមកូនសោ SSH ទៅក្នុងគណនីរបស់ពួកគេ។nano users/sms.py
ចូរចាប់ផ្តើមដោយបន្ថែមឯកសារ SSHSHCONFIG ថ្មីដែលប្រាប់ Server របៀបប្រើ SSH ។# nano sshd_config
# # នេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធប្រព័ន្ធរបស់ម៉ាស៊ីនមេអេសអេសអេសអេសឌី។ មើល
# sshd_config (5) សម្រាប់ព័ត៌មានបន្ថែម។
# អេសអេសអេសអេសនេះត្រូវបានចងក្រងជាមួយផ្លូវ = / usr / usr / usr / usr / usr / usr / usr / bin: / usr: / usr:
# យុទ្ធសាស្ត្រដែលប្រើសម្រាប់ជម្រើសក្នុងលំនាំ SSHD_CONFIG បានដឹកជញ្ជូនជាមួយ
# openssh គឺបញ្ជាក់ជម្រើសដែលមានតម្លៃលំនាំដើមរបស់ពួកគេដែលជាកន្លែងដែល
# អាចធ្វើទៅបានប៉ុន្តែទុកឱ្យពួកគេបានធ្វើអត្ថាធិប្បាយ។ ជម្រើសដែលមិនមានការចាប់អារម្មណ៍បដិសេធ
# តម្លៃលំនាំដើម។
#port 22
# Aaddradfamily ណាមួយ
# listenaddress 0.0.0.0
# listenaddress ::
#hostkey / etc / ssh / ssh_host_rsa_key
#hostkey / etc / ssh / ssh_host_ecdsa_ey
#hostkey / etc / ssh / ssh_host_ed25519_key
# ciphers និង keying
#rekeylimit លំនាំដើមគ្មាន
# ការកាប់ឈើ
#syslogfacimility
# insloglevel info
# ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ:
# Logingracetime 2M
#permitrootlogin ហាមឃាត់ - លេខសម្ងាត់
#strictmodes បាទ
#maxauthiះ 6
#maxsessions 10
PubKeyauthentication បាទ
# រំពឹង .ssh / ផ្តល់សិទ្ធិឱ្យអ្នកមានសិទ្ធិមិនគោរពតាមលំនាំដើមនាពេលអនាគត។
អ្នកនិពន្ធសិទ្ធិអំណាច .ssh / មានសិទ្ធិអំណាច
# អាត្យូឌីស៊ីលីនភីសហ្វូហ្វហ្វីលីព
# Aauthorizeysommand មិនមានទេ
#authorizkeysommommermer អ្នកប្រើ
# សម្រាប់នេះដើម្បីធ្វើការអ្នកក៏នឹងត្រូវការកូនសោម៉ាស៊ីនក្នុង / etc / ssh / ssh_known_hostss
#hostbasedauthentacation ទេ
# ប្តូរទៅបាទ / ចាសប្រសិនបើអ្នកមិនទុកចិត្ត ~ / .ssh / Alem_Hosts សម្រាប់
# Hostbasedautionication
#ignorsererserknownhosts ទេ
# កុំអានឯកសារ ~ / .rhosts របស់អ្នកប្រើប្រាស់និង ~ / .shosts
#ignorererhosts បាទ
# ដើម្បីបិទពាក្យសម្ងាត់អត្ថបទជម្រះធ្យូងថ្ម, ប្តូរទៅរកនៅទីនេះ!
លេខកូដសំងាត់ទេ
#permattemptpasswards ទេ
# ប្តូរទៅបាទ / ចាសដើម្បីបើកលេខសម្ងាត់ឆ្លើយតប - ឆ្លើយតប
# ម៉ូឌុលនិងខ្សែស្រឡាយ Pam ខ្លះ)
kbdinteractiveveationation ទេ
# ជម្រើស Kerberos
# kkerberosauthentication ទេ
#kerberosorlopaspasswd បាទ / ចាស
#kerberberosticketclaup បាទបាទ
#kerberosgetethstoken ទេ
# ជម្រើស GSSAPI
#gssapiuthiottionation ទេ
#gssapicleanupcredials បាទ
# GssapRisticationacecks បាទបាទ
#gssapikeyangeyegchange ទេ
# កំណត់វាទៅ 'បាទ / ចាស' ដើម្បីបើកដំណើរការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ Pam ការដំណើរការគណនី
# និងដំណើរការសម័យ។ ប្រសិនបើមានដំណើរការនេះការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ Pam នឹង
# ត្រូវបានអនុញ្ញាតតាមរយៈ KbdinteractiveVeutication និង
# ការធ្វើសំងាត់។ អាស្រ័យលើការកំណត់របស់ PAM របស់អ្នក,
# ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ PAM តាមរយៈ KBDInteractiveationation អាចមានផ្លូវវាង
# ការកំណត់របស់ "សញ្ញាប័ត្រអនុញ្ញាតិឱ្យមានដោយគ្មានពាក្យសម្ងាត់" ។
# ប្រសិនបើអ្នកគ្រាន់តែចង់ឱ្យគណនីរបស់ PAM និងការត្រួតពិនិត្យវេនដើម្បីដំណើរការដោយគ្មាន
# ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ Pam បន្ទាប់មកបើកដំណើរការនេះប៉ុន្តែកំណត់ពាក្យសម្ងាត់
# ហើយ kbdinteractivealation ទៅ 'ទេ' ។
enterpam បាទ
#AlloweForwarding បាទ / ចាស
# allowtcpForwarding បាទ / ចាស
#gewatewayports ទេ
x11Frowning បាទ
# x11displayoffet 10
# x11uselocalhost ត្រូវ
# Permittty បាទ
print mont ទេ
#printlastlog បាទ
#tcpekeontalive បាទ
#permitimusererenvironment ទេ
# ការពន្យារពេល
#clientalivalInterval 0
#clientalivectmax 3
# អ្វីទេ
#pidfile /run/SSHD.PID
#maxStartups 10: 30: 100
#permittuncel ទេ
# ឆាកចៃឌ្រីរីគ្មានទេ
# ព្យូដាឌូមដិម
# គ្មានផ្ទាំងបដាលំនាំដើម
បដា / ល / បដា
# អនុញ្ញាតឱ្យអតិថិជនឆ្លងកាត់អថេរបរិស្ថានមូលដ្ឋាន
ទទួលយក LAND LC_ *
# បដិសេធលំនាំដើមនៃមិនមានប្រព័ន្ធរង
ប្រព័ន្ធប្រព័ន្ធ SFTP / USR / Lib / OpenSsh / SFTP-server
# ឧទាហរណ៍នៃការបដិសេធការកំណត់លើមូលដ្ឋានអ្នកប្រើម្នាក់
#Match Anoncvs អ្នកប្រើ
# x11Frownt ទេ
# SELTETCPFOWNTE ទេ
# មិនមានទេ
# ម៉ាស៊ីនមេ Forcommand CVS
សញ្ញាប័ត្រអនុញ្ញាតិអោយមាន
# នេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធទូទាំងប្រព័ន្ធអេស។ អេស។ អេ។ អេ។ មើល
# sshd_config (5) សម្រាប់ព័ត៌មានបន្ថែម។
# SSHSH នេះត្រូវបានចងក្រងជាមួយ Path = / usr / usr / usr / usr / usr / usr / usr / bin: / usr: / usr:
# យុទ្ធសាស្ត្រដែលប្រើសម្រាប់ជម្រើសក្នុងលំនាំ SSHD_CONFIG បានដឹកជញ្ជូនជាមួយ
# OpenSSH គឺបញ្ជាក់ជម្រើសដែលមានតំលៃលំនាំដើមរបស់ពួកគេដែលជាកន្លែងដែល
អាចធ្វើទៅបានប៉ុន្តែទុកឱ្យពួកគេបានបញ្ចេញមតិ។ ជម្រើសដែលមិនមានការចាប់អារម្មណ៍បដិសេធតម្លៃលំនាំដើម។
ច្រក 22# និយាយអាសយដ្ឋានណាមួយ
AUTH_VALID_MINUTES = 3 # សូមស្តាប់ 0.0.0.0
សូមស្តាប់ ::Hestaeke / etc / ssh / ssh_host_rsa_key
HostKey / etc / ssh / ssh_host_ecd_ecdsa_keey# Hestaeke / etc / ssh / ssh_host_ed25519_key
# Ciphers និង Keying
# rejecklimit លំនាំដើមគ្មាន
ការកាប់ឈើsynclogfacaceigility
ព័ត៌មាន loglevel# ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ:
logingracetime 2mលិខិតអនុញ្ញាតលិខិតអនុញ្ញាត
បាទ stictmodesnano users/templates/users/mfa.html
Maxauthiះ 6Maxsessions 10
រំពឹងថា .ssh / ផ្តល់សិទ្ធិឱ្យអ្នកមានសិទ្ធិមិនគោរពតាមលំនាំដើមនាពេលអនាគត។
គ្មានសិទ្ធិពលរដ្ឋគ្មានសិទ្ធិទេអ្នកនិពន្ធសិទ្ធិអំណាចគ្មាននរណាម្នាក់
អ្នកនិពន្ធគ្មានសិទ្ធិនរណាម្នាក់nano users/templates/users/mfa_onboarding.html
សម្រាប់ការងារនេះធ្វើការអ្នកក៏នឹងត្រូវការគ្រាប់ចុចម៉ាស៊ីនក្នុង / etc / ssh / ssh_kkknown_HostsHosterbasedauthentication ទេ
ផ្លាស់ប្តូរទៅបាទ / ចាសប្រសិនបើអ្នកមិនទុកចិត្ត ~ / .ssh / ser_hosts សម្រាប់
ការធ្វើត្រាប់តាមកុំធ្វើសកម្មភាពអ្នកវង្វេងស្មារតីទេ
កុំអានឯកសារ ~ / .rhosts របស់អ្នកប្រើប្រាស់និង ~ / .shostsមិនអើពើទេបាទ
ដើម្បីបិទលេខសំងាត់អត្ថបទដែលបានជម្រះធ្យូងថ្មប្តូរលេខកូដសំងាត់សូមប្តូរទៅរកនៅទីនេះ!Siftettpasswords ទេ
ផ្លាស់ប្តូរទៅបាទ / ចាសដើម្បីបើកលេខសម្ងាត់ឆ្លើយតបរបស់ការពិបាក# ម៉ូឌុលនិងខ្សែស្រឡាយ Pam មួយចំនួន)
ជម្រើស KerberosKerberosauthentication ទេ
kerberosorlopalpasswd បាទ / ចាស# kerberosticketclaup បាទបាទ
KerberosgetFstoken ទេជម្រើស GSSAPI
gssapiuthentation ទេnano users/templates/users/profile.html
បាទ GSSAPICLEANUPCREDIATS បាទ
gssap.comeck បាទបាទGSSAPIKEYEXCHENGE NO
កំណត់វាទៅ "បាទ / ចាស" ដើម្បីបើកដំណើរការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ Pam ដំណើរការគណនី,និងដំណើរការសម័យ។ ប្រសិនបើមានដំណើរការនេះការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ Pam នឹង
ត្រូវបានអនុញ្ញាតតាមរយៈ KbdinteractiveVeutionation និង# ការបញ្ជាក់ពាក្យសម្ងាត់។ អាស្រ័យលើការកំណត់របស់ PAM របស់អ្នក,
# ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ Pam តាមរយៈ KBDInteractiveationation អាចឆ្លងកាត់
ការកំណត់ "សញ្ញាប័ត្រអនុញ្ញាតិឱ្យមានពាក្យសម្ងាត់" ។ប្រសិនបើអ្នកគ្រាន់តែចង់ឱ្យគណនី PAM និងការត្រួតពិនិត្យសម័យត្រូវដំណើរការដោយគ្មាន
ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ Pam បន្ទាប់មកបើកដំណើរការនេះប៉ុន្តែកំណត់ពាក្យសម្ងាត់backup
ហើយ kbdinteractiveonation ទៅ 'ទេ' ។សូមអរគុណ
អនុញ្ញាតឱ្យបាទ / ចាសpython manage.py runserver localhost:8000
ខ្លោងទ្វារទេx1displayoffet 10
x11uselocalhost បាទត្រូវបានអនុញ្ញាត
បាទ / ចាសtcpeekealive បាទ
NEWINSERENVironment ទេការពន្យារពេលការបង្ហាប់
ComersaliteTeinterval 0ClileLibeCountmax 3
បានប្រើគ្មានpython manage.py startapp errors
Podfile /run/SSHD.PIDMaxstartups 10: 30: 100
Permittunnel ទេhandler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
chrootdirectory គ្មានមិនមាន
គ្មានផ្ទាំងបដាលំនាំដើមទេ# អនុញ្ញាតឱ្យអតិថិជនឆ្លងកាត់អថេរបរិស្ថានមូលដ្ឋាន
បដិសេធលំនាំដើមនៃមិនមានប្រព័ន្ធរងឧទាហរណ៏នៃការបដិសេធការកំណត់លើមូលដ្ឋានអ្នកប្រើម្នាក់
ផ្គូផ្គង anoncvs អ្នកប្រើ # X11Frownting ទេ
អនុញ្ញាតឱ្យគ្មានមិនមានទេ
ម៉ាស៊ីនមេ Forcommand CVSfrom threading import local
import traceback
from django.utils.deprecation import MiddlewareMixin
_error = local()
class ExceptionVerboseMiddleware(MiddlewareMixin):
def process_exception(self, request, exception):
_error.value = traceback.format_exc()
def get_current_exception():
try:
return _error.value
except AttributeError:
return None
def set_current_exception(exception):
try:
_error.value = exception
except AttributeError:
print('Attribute error setting exception.')
សូមចងចាំថា Ctrl + X និង y ដើម្បីរក្សាទុកឯកសារ។ បន្ទាប់សូមសរសេរស្គ្រីបមូលដ្ឋានដែលមានឈ្មោះថាការចាប់ផ្តើម (ទាំងអស់នៅក្នុងថតផ្ទះលំនាំដើមរបស់អ្នកប្រើប្រាស់របស់យើង) ។Nano ចាប់ផ្តើម
ជាមួយនឹងកូនសោ SSH របស់អ្នកអ្នកបានរកឃើញដោយប្រើឆ្មា។ (.ssh / id_rsa.pub)nano errors/templates/errors/error.html
#! / ធុងសំរាម / ប៊ីស
Sudo apt ដំឡើង -y nano git openssh-server
Sudo CP sshd_config / etc / ssh / sshd_config
Sudo សេវាកម្ម SSH ចាប់ផ្តើមឡើងវិញ
សេវាកម្មសូដូសូអេសអេសអេសអេសអេសអេសចាប់ផ្តើមឡើងវិញ
អេកូ "" /root/.ssh/id_rsa "| Sudo su root -c "ssh-keygen -t rsa -n ''"
អេកូ "" កូនសោរអេសអេសអេស: "
Sudo su root -c "ឆ្មា /root/.ssh/id_rsa.pub"
"" ក្រុម sudoer userdisabled-លេខសំងាត់ - ហ្គេកកូស ""
Sudo Passwd -d ក្រុម
ក្រុម Sudo Usermod -gagudo
អេកូ "/ Homom/team/.ssh/id_rsa" | Su Team -c "SSH-Keygen -t RSA -N" '"
ឆ្មា / ហៃម / ធីម / .ssh/id_rsa.pub >> /home/team/.ssh/authoryized_keys
អេកូ '' >> /home/team/.ssh shouthized_keys
អេកូ "" ក្រុម SSH កូនសោ: "
ឆ្មា / ហ៊ុមិច/.ssh/id_rsa.pub
! / bin / bashដើម្បីដើរអ្នកតាមរយៈឯកសារនេះសូមចាប់ផ្តើមបន្ទាត់តាមជួរ។ ខ្សែទីមួយប្រាប់អ្នកចងក្រងថានេះជាអក្សរសំពៅ។ បន្ទាប់មកយើងកំពុងដំឡើងភាពអាស្រ័យការចម្លង Sshd_config ទៅថតដែលត្រឹមត្រូវ, ការចាប់ផ្តើម SSH ដែលបន្ថែមឫស, បន្ថែមឈ្មោះរបស់អ្នកប្រើ "(អ្នកអាចជ្រើសរើសពាក្យបញ្ជា adduser ដែលមានឈ្មោះនិងពាក្យសម្ងាត់របស់ពួកគេឥឡូវនេះ) ។ យើងក៏បន្ថែមក្រុមទៅក្រុមសូដូដូបង្កើតកូនសោ SSH បន្ថែមកូនសោរបស់យើងចំពោះកូនសោដែលមានការអនុញ្ញាតនិងរបស់ពួកគេផងដែរហើយបោះពុម្ពកូនសោរបស់ពួកគេផងដែរ។ អ្នកប្រើប្រាស់ថ្មីនេះនឹងក្លាយជារបៀបដែលយើងចូលទៅក្នុងគេហទំព័រ។
នៅក្នុងស្ថានីយថ្មីទៅមុខហើយបើកម៉ាស៊ីនមេម្តងទៀត។nano app/settings.py
ssh geat@xx.xx.xx.xx.xx.xxអ្នកមិនចាំបាច់ត្រូវការលេខសម្ងាត់នៅពេលនេះទេដូចដែលអ្នកមានកូនសោ SSH ។ យើងក៏បានបិទការចូលដោយប្រើពាក្យសម្ងាត់ដើម្បីរក្សាគេហទំព័រឱ្យកាន់តែមានសុវត្ថិភាព។
ឥឡូវនេះម៉ាស៊ីនមេនេះចាប់ផ្តើមនៅទទេទាំងស្រុងដោយមិនមានព័ត៌មានអំពីវា។ ចូរចាប់ផ្តើមដោយធ្វើឱ្យក្លូនគម្រោងរបស់យើងចេញពី Git ដូច្នេះយើងអាចទាញយកបានហើយដំណើរការវានៅលើម៉ាស៊ីនពីចម្ងាយ។ នៅលើម៉ាស៊ីនមេពីចម្ងាយបានភ្ជាប់អេសអេសដំបូងបោះពុម្ពកូនសោ SSH របស់អ្នក:DEBUG = False
ឆ្មា ~ / .ssh / id_rsa.pubបន្ទាប់បិទភ្ជាប់កូនសោនេះទៅក្នុងការកំណត់ git ដូចដែលយើងបានធ្វើមុនពេលរៀបចំឃ្លាំង git របស់យើង។ ឥឡូវនេះយើងអាចក្លូនគម្រោងរបស់យើងដោយផ្ទាល់ទៅម៉ាស៊ីនមេ។ ត្រូវប្រាកដថាអ្នកបានបម្រុងទុកគម្រោងជាមូលដ្ឋានដំបូងដូច្នេះវាស្ថិតនៅលើម៉ាស៊ីនមេ GIT ដើម្បីទាញយក។
git ក្លូន git: //github.com/you/yourproject.gitsudo backup
ល្អឥតខ្ចោះ។ ឥឡូវឯកសារទាំងអស់នៅទីនេះ។ យើងអាចមើលឃើញពួកគេជាមួយអិលអេសអិល
ឥឡូវសូមចាប់ផ្តើមរៀបចំម៉ាស៊ីនមេ។ ដំបូងចម្លងថតគម្រោងរបស់អ្នកទៅក្នុងឈ្មោះសាមញ្ញមួយដែលយើងនឹងប្រើសម្រាប់គម្រោង។CP -r របស់អ្នក ayingproject whatooucalledit
កន្លែងដែល "Whatooucalledit" គឺជាឈ្មោះថ្មីនៃគម្រោងរបស់អ្នក។ បន្ទាប់យើងនឹងត្រូវបង្កើតឧបករណ៍ប្រើប្រាស់មូលដ្ឋានដើម្បីរៀបចំម៉ាស៊ីនមេ។ យើងនឹងរក្សាទុកឧបករណ៍ប្រើប្រាស់នេះហើយប្រើវានៅពេលអនាគត។ ដើម្បីបង្កើតឧបករណ៍ប្រើប្រាស់នេះសូមបង្កើតប្រព័ន្ធគោលពីររបស់អ្នកប្រើដើម្បីកំណត់របៀបដែលយើងកែសម្រួលស្គ្រីប។ ការប្រើបាប៊ីកែប្រែ / usr / bin / ascriptnano users/models.py
ស៊ូដូណាណូ / usr / bin / ascriptត្រូវប្រាកដថាប្រើស៊ូដូដូនៅទីនោះដូច្នេះអ្នកមានសិទ្ធិក្នុងការកែសម្រួលឯកសារ។ នៅក្នុងឯកសារបន្ថែមបន្ទាត់ទាំងនេះ:
#! / ធុងសំរាម / ប៊ីស ប្រសិនបើ [! -f / usr / bin / $ 1]; បេលនោហ ស៊ូដូទូច / usr / bin / $ 1 អេកូ "#! / bin / bash" >> / usr / bin / $ 1 Sudo Chmod a + X / usr / bin / $ 1 Sudo Nano / usr / bin / $ 1 អេកូ $ 1 | sudo tee -a / etc / ascripts ឯត្យេត Sudo Chmod a + X / usr / bin / $ 1 Sudo Nano / usr / bin / $ 1 f# ! / bin / bash
! / bin / bash ">> / usr / bin / $ 1ចងចាំស្គ្រីបនេះត្រូវការអាគុយម៉ង់ឈ្មោះស្គ្រីបលេខ 1 ដុល្លារ។ ដំបូងវាពិនិត្យមើលថាតើឯកសារមានឬបើមិនដូច្នេះទេបង្កើតបន្ទាត់ទីមួយដើម្បីប្រកាសស្គ្រីបគឺផ្លាស់ប្តូរសិទ្ធិរបស់វាកែប្រែវាហើយបន្ថែមឈ្មោះរបស់វាដែលអនុញ្ញាតឱ្យយើងរក្សាទុកឈ្មោះស្គ្រីបដែលយើងកំពុងបង្កើត។ ប្រសិនបើឯកសារមានរួចហើយគ្រាន់តែផ្លាស់ប្តូរសិទ្ធិហើយកែសម្រួលវា។ រក្សាទុកឯកសារហើយបន្ទាប់យើងនឹងផ្លាស់ប្តូរសិទ្ធិរបស់វា។ ដរាបណាយើងប្រើស្គ្រីបនេះយើងនឹងមិនចាំបាច់ធ្វើវាម្តងទៀតទេ។
Sudo Chmod A + X / usr / bin / Ascript vendor = models.BooleanField(default=False)
ល្អឥតខ្ចោះ។ ឥឡូវសូមបង្កើតស្គ្រីបដែលមានឈ្មោះថាតំឡើង។ ដំបូងមិនឱ្យលើសអ្នកទេប៉ុន្តែសូមក្រឡេកមើលអ្វីដែលស្គ្រីបតំរឹមរបស់ខ្ញុំមើលទៅ។ យើងនឹងដើរតាមរយៈអ្វីដែលស្គ្រីបនេះគួរមើលទៅដូចជានៅក្នុងគម្រោងរបស់អ្នកអ្នកនឹងមិនត្រូវការអ្វីទាំងអស់ក្នុងស្គ្រីបរបស់ខ្ញុំដើម្បីចាប់ផ្តើមជាមួយ។#! / ធុងសំរាម / ប៊ីស វិនាទី = 0 Python_version = 3.12 អេកូ "កម្មវិធីដំឡើង Fembabe បានចាប់ផ្តើម។ " # Sudo Chmod A + X ស្គ្រីប / អ្នកប្រើប្រាស់ # ./scripts/usersetup # ssh-keygen # សៀវភៅគម្រោង dir = "/ home ផ្ទះ / Feed / FemMebabe" អ្នកប្រើប្រាស់ = "ក្រុម" # កំណត់ហេតុពាក្យបញ្ជា អេកូ "ពាក្យបញ្ជាកាប់ឈើ" Sudo CP Log / Constrs.log /var/log/Commands.log Sudo Chmod -r a + W / var / log Sudo Chown -r: syslog / var / log អេកូ $ "ឈ្មោះហៅក្រៅ =" ប្រភព / ផ្ទះ / ក្រុម / FEMMEBABE / VENV / Bin / Activate "'| Sudo tee -a /home/team/.profile អេកូ $ "Mept_Command = \ 'the logger -p locling6.deoc6.de.debug [$ (whounmi): $ sed [[0-9] \ + [[] ^ /'" Sudo tee -a / etc / bashrc អេកូ $ "Mept_Command = \ 'the logger -p locling6.deoc6.de.debug [$ (whounmi): $ sed [[0-9] \ + [[] ^ /'" Sudo Tee -a "/ Home/team/.bashrc" អេកូ $ "Mept_Command = \ 'the logger -p locling6.deoc6.de.debug [$ (whounmi): $ sed [[0-9] \ + [[] ^ /'" Sudo Tee -a /root/.bashrc អេកូ "" ប្រភព / etc / bashrc "| Sudo tee -a /home/team/.profile អេកូ "/var/log/Commands.log" | Sudo Tee -a /etc/logrotate.d/syslog អេកូ "loc ur local6 ។ * /var/log/Commands.log" | Sudo Tee -a "/etc/rsyslog.d/bash.conf" សេវាកម្ម sudo rsyslog ចាប់ផ្តើមឡើងវិញ # Nano config អេកូ "កំណត់ផ្ទាំងផ្ទាំង 4" >> .Nanorc អេកូ "កំណត់ Tabstpackaces" >> .Nanorc # កំណត់រចនាសម្ព័ន្ធ GIT អេកូ "ការកំណត់រចនាសម្ព័ន្ធ GIT" Sudo Git Confight.global use.email "jasper.camber.holt@gmail.com" & & sudo.com "&& sudo git config - uggperbal us.name.Name" git config inform --global user.email "jasper.camber.holte@gmail.com" git config --global user.name "Jasper Holton" git config inform - logadd - defect.directory $ "$ dri" Sudo SSH-Keyscan -t rsa gitlab.com | Sudo Tee -a /root/.ssh/kkkown_Hosts Sudo SSH-Keyscan -t rsa github.com | Sudo Tee -a /root/.ssh/kkkown_Hosts អេកូ "ដំឡើងការដំឡើង" ស៊ូដូម៉ាន - អូបានកើនឡើង, ទំហំ = 16 ក្រាម, ការកំសាន្ត / អក្សរ # ធ្វើបច្ចុប្បន្នភាពនិងតំឡើង អេកូ "" ធ្វើបច្ចុប្បន្នភាពនិងតំឡើងកញ្ចប់ " Sudo Apt ធ្វើឱ្យទាន់សម័យនិង & sudo tefitestart_mode = ការធ្វើឱ្យប្រសើរឡើង apt -hyy PostgreSQL-comment-applate postgresq អេកូ "" Postfix Postfix ខ្សែអក្សរ Femmebabe.com "| Sudo debconf-set-set-settion អេកូ "" Postfix Postfix / Main_Mailer_TEPE "គេហទំព័រអ៊ីធឺណិត" | Sudo debconf-set-set-settion Sudo TestRestart_Mode = Debian_frontend = ការតំឡើង Apt Apt ដែលមិនទាក់ទាញ Sudo TustRestart_Mode = APT ATTUTUMP-DRKHUNAR CLBX264-DEV FFMACH2-Wenv Python3- Pip Python3-Django រំពឹងថានឹងមាន OpenJDK-8-JDK Redis-Server Libeif-Dev Python3-Dev OpenDkim Open-Ippormail Postmasql Postmast Postmast Cretbot Python3- Cretbot-Apache អេកូ "-a ចេញ, ជានិច្ច, -, reach = b64 -f euid = 0 -s Sudo Tee -a /etc/audit/audit.rules អេកូ "-a ចេញ, ជានិច្ច, -, feach = b32 -f euid = 0 -s Sudo Tee -a /etc/audit/audit.rules # បើកការកំចាត់មេរោគ Clamav អេកូ "ចាប់ផ្តើមកំចាត់មេរោគ" Sudoctll អនុញ្ញាតឱ្យ Clamav-Daemon Sudoctl ចាប់ផ្តើម clamav-daemon # កំណត់ឈ្មោះម៉ាស៊ីន អេកូ "127.0.0.1 Femmebabe" | Sudo Tee -a / etc / ម្ចាស់ម៉ាស៊ីន Sudo Hestnamectl Set-HostName Localhost # តំឡើង Postgres អេកូ "តំឡើង Postgres Setup" sudo -u postgres psql -u postgres -c "ទម្លាក់ទិន្នន័យមូលដ្ឋានទិន្នន័យរបស់មូលដ្ឋានទិន្នន័យ" ។ Sudo -u Postgres PSQL -U Postgres -C "បង្កើតមូលដ្ឋានទិន្នន័យមូលដ្ឋានទិន្នន័យ;" Sudo -u Postgres PSQL -U Postgres -c "បង្កើតអ្នកប្រើប្រាស់ Django ដោយពាក្យសម្ងាត់" ពាក្យសម្ងាត់ '; " Sudo -u Postgres PSQL -U Postgres -c "ផ្លាស់ប្តូរតួនាទី Django កំណត់របស់ Cell_encoding ទៅ 'utf8';" Sudo -u Postgres PSQL -U Postgres -c "ការផ្លាស់ប្តូរតួនាទី Django កំណត់ការប្រព្រឹត្ត" អាន "។ Sudo -u Postgres PSQL -U Postgres -c "ការផ្លាស់ប្តូរតួនាទី Django បានកំណត់ពេលវេលាកំណត់ទៅ 'utc';" Sudo -u Postgres PSQL -U Postgres -C "ផ្តល់ឱ្យសិទ្ធិទាំងអស់លើមូលដ្ឋានទិន្នន័យនៃមូលដ្ឋានទិន្នន័យទៅ Django;" # ការបម្រុងទុកមូលដ្ឋានទិន្នន័យដំឡើងមូលដ្ឋានទិន្នន័យ អេកូ "" បង្កើតមូលដ្ឋានទិន្នន័យពីការបម្រុងទុក, នេះអាចចំណាយពេលបន្តិច "។ ឆ្មា db.json ។ ?? > db.json អេកូ "កំណត់រចនាសម្ព័ន្ធជញ្ជាំងភ្លើង" Sudo UFW លំនាំដើមអនុញ្ញាតឱ្យចេញ Sudo UFW លំនាំដើមបដិសេធការចូល Sudo UFW អនុញ្ញាតឱ្យ 22 Sudo UFW អនុញ្ញាតឱ្យ HTTP Sudo UFW អនុញ្ញាតឱ្យ HTTPS Sudo UFW អនុញ្ញាត 'Postfix' Sudo UFW អនុញ្ញាត 'Postfix SMTPS' Sudo UFW អនុញ្ញាត 'Postfix ការដាក់ស្នើ' Sudo UFW អនុញ្ញាតឱ្យ 'DOVECOT POP3' Sudo UFW អនុញ្ញាតឱ្យមានសុវត្ថិភាពរបស់ Dovecot POP3 ' Sudo UFW អនុញ្ញាតឱ្យមាន 110 / TCP Sudo UFW អនុញ្ញាតឱ្យមាន 25 / TCP អេកូ "អ៊ី" | Sudo UFW បើក # បិទ IPTable អេកូ "កំណត់រចនាសម្ព័ន្ធជញ្ជាំងភ្លើង" ការទទួលយក IPTABER -P ទទួលយក Sudo iptables -p ទទួលយកលទ្ធផល Sudo iptables -p នឹងទទួលបានការបញ្ជូនបន្ត Sudo iptable -f Sudo iptable-Save បាន # តំឡើង Bitdefender ស៊ីឌី $ dir អេកូ "ដំណើរការកម្មវិធីដំឡើងប៊ី។ ស៊ី។ ឌី wget https://cloud.gravityzone.bitefender.com/packages/nix/0/7ssy/sip_getup_downloader.tar mkdir bitdefender TAR -XF setup_downloader.tar -c bitdefender sudo rm setp_downloader.tar sed -i -e 's / {logingpasswd / z & a; * 3bpd_qbgums / g' bitdefender / អ្នកដំឡើង Sudo Chmod A + X Bitdefender / អ្នកតំឡើង sudo ./bitdefender/installer # តំឡើងប្រៃសណីយ៍ ស៊ីឌី $ dir ឯកសារអេកូ "ការកំណត់រចនាសម្ព័ន្ធសេវាកម្មសំបុត្រ" ស៊ូដូស៊ី/etc/postfix/main.cf /etc/postfix/main.cf.backup Sudo CP config / etc_postfix_main.cf /etc/postfix/main.cf Sudo CP config / etc_postfix_master.cf /etc/postfix/master.cf Sudo CP config / etc_default_opendkim / etc / លំនាំដើម / OpenDKIM Sudo CP config / etc_dovecot_conf.d_10-auth.conf /etc/dovecot/conf.d/10-auth.conf Sudo CP config / etc_dovecot_conf.d_10-master.conf /etc/dovecot/conf.d/10-masterf.conf Sudo CP config / etc_dovecot_dovecot.conf /etc/dovecot/dovecot.conf sudo cp config / etc_dovecot_passwd / etc / dovecot / passwd Sudo CP config / etc_opendkim.conf /etc/opendkim.conf Sudo CP config / etc_default_opendkim / etc / លំនាំដើម / OpenDKIM Sudo adduser Postfix OpenDKIM Sudo Mkdir / etc / Openwkim sudo mkdir / etc / opendkim / keys Sudo Mkdir /etc/opendkim/keys/femmebabebabe.com Sudo Mkdir / var / Spool / Postfix / OpenDKIM ស៊ូដូអេកូហ្សូអូ "@FEMMEBABE.com Sendonly._domainainkey.Femmebabe.com" | Sudo Tee -a /etc/opendkim/signing.table ស៊ូដូអេអូអេសអូ "Sendony._domainainkeBabe.com ::sendonly:/etc/opendsim/eleys/femmebabebabebabebabebabebababe.com/sendonly.private" | Sudo Tee -a /etc/opendkim/Key.table ស៊ូដូអេសអូ "127.0.0.1" | Sudo Tee -a /etc/opendkim/trusted.Hosts ស៊ូដូអេសអេកូ "Localhost" | Sudo Tee -a /etc/opendkim/trusted.Hosts ស៊ូដូអេសអូ "" | Sudo Tee -a /etc/opendkim/trusted.Hosts ស៊ូដូអេកូ "* .femmebabe.com" | Sudo Tee -a /etc/opendkim/trusted.Hosts Sudo Chown -r OpenDkim: OpenDkim / etc / OpenDKIM Sudous Opendkim-Thegey -b 2048 -d Femmebabe.com -D / steetc/opendkim/keys/femmebabebabe.com -V Sudo Chmod Go-RW / etc / OpenDkim / Keys Sudo Chown OpenDkim: Opendkim /etc/opendkim/keys/femmebabebabebabebabebabebabebababe.private Sudo Chown OpenDkim: Postfix / var / spool / postfix / opendkim ស៊ីឌី $ dir Sudo CP ប្រអប់សំបុត្រ / * / var / សំបុត្រ / Sudo Chown: អ្នកប្រើប្រាស់ / var / mail / * Sudo Chmod -r A + RWX / VAR / MAR / * Sudoctl ចាប់ផ្តើមឡើងវិញនូវកម្មវិធី OpenDkim Postfix Dovect # បង្កើតភាពរឹងមាំ ស៊ីឌី $ dir MKDir Media / សំលេង MKdir Media / អូឌីយ៉ូ / ស្នាមម្រាមដៃ MKDir Media / សុវត្ថិភាព MKDir Media / មានសុវត្ថិភាព MKDir Media / សុវត្ថិភាព / ប្រព័ន្ធផ្សព្វផ្សាយ MKDir Media / សុវត្ថិភាព / វីដេអូ MKDir Media / សុវត្ថិភាព / ទម្រង់ MKDir Media / សុវត្ថិភាព / មុខ MkDir Media / រូបភាព MKDir Media / ផ្សាយផ្ទាល់ MKdir Media / ផ្ទាល់ / ឯកសារ MKdir Media / ផ្ទាល់ / នៅតែមាន MKdir Media / ឯកសារ Mkdir Temp MKDir Temp / ទិន្នន័យ MKDir Temp / Gfpgan mkdir សំបុត្រ / ប្រអប់ទទួល ប្រអប់សំបុត្រ MKDIR # តំឡើង Virtuallenv ស៊ីឌី $ dir អេកូ "បង្កើតបរិយាកាសនិម្មិត" ពស់ថ្លាន់ -m venv venv venv ប្រភព Venv / bin / Active # ទទួលបាននិងបង្កើតភាពអាស្រ័យ អេកូ "ទទួលបាននិងការកសាងភាពអាស្រ័យ, នេះអាចនឹងកើតឡើង" ស៊ីឌី $ dir Git ក្លូន HTTPS://github.com/sukhitashvili/violence-dettion.git config config / vd- តំរូវការ។ ការរកឃើញអំពើហឹង្សា / តម្រូវការ CEMINGE CONFIG / VD-Model.py អំពើហឹង្សា - ការរកឃើញ / Model.py ការរកឃើញអំពើហឹង្សាស៊ីឌី pip3 upstin install -r តម្រូវការតម្រូវការ ស៊ីឌី $ dir wgett https://github.com/tencentarc/gfpgan/relless/download/v1.3.0/gfpanvanv1.3.pth -p ការពិសោធន៍ / pretrenden_models ក្លូនក្លូន HTTPS ://github.com/tencentarc/gfpgan.git Git ក្លូន HTTPS://github.com/davisking/dlib.git ស៊ីឌី dlib អគារ MKDIR; ការកសាងស៊ីឌី; ស៊ីអឹមខេ .. ; cmake - build ។ ស៊ីឌី .. ប្រភព Venv / bin / Active ដំឡើង Python Setup.py ស៊ីឌី $ dir ប្រភព Venv / bin / Active ស៊ីឌី $ dir / gfpgan / អេកូ "ដំឡើងភាពអាស្រ័យរបស់ Python" PIP តំឡើង Basicsr pip ដំឡើង facexlib Pip Autter -r តម្រូវការតម្រូវការ .txt Python Setup.py អភិវឌ្ឍ PIP តំឡើង Realesrgan ស៊ីឌី $ dir ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ Gfpgan អេកូ "ដំឡើង TA-LIB" wget htps://prodownloads.sourcefore.net/ta-lib/ta-lib-0.4.0-src.tar.gz tar xvzf ta-lib-0.4.0-src.tar.gz sudo rm ta-lib- * ស៊ីឌីតា - លីប Sudo ./Configure Sudo បង្កើត ស៊ូដូធ្វើការតំឡើង # កំណត់ច្បាប់ជញ្ជាំងភ្លើង ស៊ីឌី $ dir # តំឡើងភាពអាស្រ័យរបស់ PYPI អេកូ "ដំឡើងភាពអាស្រ័យរបស់ Python ដែលនៅសល់ (នេះអាចចំណាយពេលបន្តិច)" Madoctl Mass TMP.Mount ស៊ីឌី $ dir ប្រភព Venv / bin / Active PIP3 តំឡើង -U "Celery [Redis]" PIP3 Autter3 -r តម្រូវការតម្រូវការ - ប្រើ - drepreced = កេរ្តិ៍តំណែលអ្នកដោះស្រាយ - ប្រើ PERP517 PIP3 តំឡើង - ទាញយក opencv-python # == 4.5.4.60 PIP3 ដំឡើង - PIPGRADE Opencv ការរួមចំណែក Python # == 4.5.4.60 #pip តំឡើង Opencv-Python == 4.5.5.64 #pip តំឡើង opencv-sained-python == 4.5.5.64 PIP3 ដំឡើង --upGgrade opencv-python - គ្មានក្បាល បណ្តាញ PIP3 លុបបណ្តាញ PIP3 លុប Daphne PIP3 ដំឡើងបណ្តាញ ["DAFKNE"] PIP3 តំឡើងខ្នើយ == 9.5.0 PIP3 តំឡើង Librosa PIP3 inject -U'U 'twisted [TLS, http2]' pip3 install --upgrade certifi requests urllib3 numpy oauthlib twisted pyjwt sqlparse cryptography astral webauthn docbarcodes pdf417 deepface --no-cache-dir PIP3 ដំឡើង Tensorflow == 2.15.1 # តំឡើង Cheatbot អេកូ "ដំឡើងវិញ្ញាបនបត្រ" sudo snap ដំឡើងស្នូល; sudo ខ្ទាស់ធ្វើឱ្យស្រស់ Sudo Snap តំឡើង - CRETCLASTIC Sudo LN -s / snap / bin / cretbot / usr / bin / bin / creatbot Sudo Snap ដំឡើង Redis Sudoctl អនុញ្ញាតឱ្យ Apache2 Sudoctl ចាប់ផ្តើម Apache2 # ដំណើរការ CHARTBOT Sudo Betbot - Neapache --non- អន្តរកម្ម - tos-domains femmebabe.com - email jasper.camber.holte@gmail.com # បញ្ចូលម៉ាស៊ីនបម្រើអ៊ីមែល Sudoctl ចាប់ផ្តើមឡើងវិញនូវកម្មវិធី OpenDkim Postfix Dovect # លិខិតបញ្ជាក់ចម្លង #sudo cp /etc/letsencrys/live/fepmebabebabebabe.com/privkey.pem actaekey.pem #sudo cp /etc/letsencryby/live/fepmebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabe.com/cert.pemh venv ស្គ្រីប CP / DINES.PY ដុល្លារ "/ ក្រុម / ក្រុម / Feedbabe / Venv / Python $ {python-versages} /site-packages/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting/contenting ' ស្គ្រីប CP / PWA_WEBPUSH_FormSs.py $ "/ home / fythbabe / venv / lib / python $ have.com" ស្គ្រីប CP / Webauth_views.py $ "/ home / femmebabe / venv / lib / python $} / ssite-packsy/views.py ស្គ្រីប CP / JSON.PY $ "venv / lib / python $ {python-peters} /site-packages/django/core/serializers/json.py" # កំណត់ការកំណត់អ្នកប្រើប្រាស់ Sudo GPasswd -a អ្នកប្រើប្រាស់ www -ata # កំណត់សិទ្ធិ អេកូ "ការកំណត់សិទ្ធិ" ក្រុម Sudo Chown -r -r: ឃ្លាំងសម្ងាត់អ្នកប្រើប្រាស់ / Sudo Chmod A + RWX -R ឃ្លាំងសម្ងាត់ / ក្រុម #sudo Chown -r -r: អ្នកប្រើប្រាស់ / វ៉ារ / រត់ / #sudo Chown root: root / run / sudo / ts -r Sudo Chown -R Redis: Redis / var / lib / Redis Sudo Chown -R Redis: Redis / var / log / Redis Sudo Chmod -r u + RWX, G + RWX, u + RX / Var / log / Redis Sudo Chmod + R /etc/redis/redis.conf ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ / var / log / Sudo Chown -R: អ្នកប្រើប្រាស់ ../ Sudo Chmod -r G + RWX ./ sudo chmod -r g + rx ../ Sudo Chmod -r G-RWX ../.SSH Sudo Chmod 774 ./ #sudo Chmod 664 DB.SQLite3 # ឈុតដូដូឆេឆេន www -tocation: អ្នកប្រើប្រាស់ db.sqlite3 Sudo chown -r www-dator: www-unjapteration media / Sudo Chown www -ta: អ្នកប្រើប្រាស់ ./ ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ប្រព័ន្ធផ្សព្វផ្សាយ / ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ ./ ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ ./gfpgan/ ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ ./temp/ ក្រុម Sudo Chmod A + R ក្រុម / var / សំបុត្រ / សំបុត្រ / ដុល្លារអ្នកប្រើប្រាស់ # ការកំណត់រចនាសម្ព័ន្ធច្បាប់ចម្លងនិងកំណត់សិទ្ធិ អេកូ "" កំណត់រចនាសម្ព័ន្ធសេវាកម្មដែលនៅសល់ " Sudo CP config / apis.json /etc/apis.json Sudo CP config / config.json /etc/config.json Sudo CP config / femmebabe-le-ssl.conf /etc/apache2/sites-ave-available/femmebabebabe-le-s-s-s-ssly.conf sudo cp config / etc_dovecot_passwd / etc / dovecot / passwd Sudo CP config / etc_init.d_creyery /etc/init.d/comcreyery Sudo CP config / etc_init.d_ccelerybeat /etc/init.d/ccreenybeat Sudo CP config / etc_default_celeybeat / etc / លំនាំដើម / Celeryeat Sudo CP config / etc_default_comeary / etc / លំនាំដើម / celery Sudo CP CONFING / etc_s_ystemd_system_daphne.service / etc/semdemd/system/daphne.service Sudo CP CONFING / etc_s_ystemd_sestem_cevice /etc/systemd/system/system/cleves.service Sudo CP config / etc_s_ystemd_system_clearybeat.service /etc/systemd/system/system/cleyservice Sudo Chmod A + X /etc/init.d/comcreyery Sudo Chmod A + X /etc/init.d/ccelerybeat # រៀបចំមូលដ្ឋានទិន្នន័យ អេកូ "" កំពុងធ្វើចំណាកស្រុកការធ្វើចំណាកស្រុក, នេះគួរតែរហ័ស " Python Managor..pomationation គ្រប់គ្រង Python Manage.py ធ្វើចំណាកស្រុក --run-syncdb អេកូ "កំពុងផ្ទុកទិន្នន័យ, នេះអាចចំណាយពេលបន្តិច" Python គ្រប់គ្រងការធ្វើទំនើបកម្ម .py អេកូ "តំឡើង Crutab / Sudooster / Sudooster" sudo crontab -l -u ឫស | ឆ្មា - កំណត់រចនាសម្ព័ន្ធ / crstrab | sudo crontab -u ឫស - Sudo su -c "ឆ្មាកំណត់រចនាសម្ព័ន្ធ / Sudooers >> ។ ល / Sudooers" # ចាក់ស៊ីមស៊ីមនិងយកកំណត់រចនាសម្ព័ន្ធអេសអេសអេស #sudo sed -i '' -e'e '$ d' /etc/pam.d/sshshd #Sudo Sed -I '' -e'e '$ d' / etc / ប្រវត្តិរូប អេកូ "សម័យកាលដែលត្រូវការ pam_exec.so seteuid /home/team/femmebabe/pam" Sudo Tee -a /etc/pam.d/sshshd អេកូ "សម័យកាលដែលត្រូវការ Pam_exec.so seteuid /home/team/femmebabe/logout.sh" Sudo Tee -a /etc/pam.d/sshshd Sudo Chmod A + X PAM.SH sudo rm /etc/ssh/sshd_config.d/50-cloud-init.conf # ចម្លងស្គ្រីបប៊ីននិងកំណត់សិទ្ធិ អេកូ "ស្គ្រីបចម្លង" ស្គ្រីបសូដូរបស់សូដូដូ / ផ្ទុកឡើងវិញ / usr / bin / ស្គ្រីបស្គ្រីប Sudo / Check / usr / bin / ស្គ្រីប Sudo CP / enagpu / usr / bin / ស្គ្រីបសូដូដូស៊ីអេសអេស / អ៊ីហ្វុន / យូអេសអរ / ប៊ីន / ស្គ្រីបស៊ីអូស៊ីអេច / ធ្វើឱ្យសកម្ម / usr / bin / ស្គ្រីបស្គ្រីបស៊ីឌ៉៉ូស៊ីអូ / បម្រុងទុក / usr / bin / ស្គ្រីបស្គ្រីបសូដូដូ / Iscript / usr / bin / ស្គ្រីបស្គ្រីប / តំឡើងសូដាដូ / usr / bin / ស្គ្រីប Sudo CP / Addsetup / usr / bin / ស្គ្រីបស្គ្រីប / ឃ្លាំមើលសូសូសូ / usr / bin / ស្គ្រីបស្គ្រីប / កំណត់ហេតុរបស់ស៊ូដូ / usr / usr / bin / ស្គ្រីបស្គ្រីបស៊ីអូអូស៊ី / ស៊ី។ អេស។ អេ។ / យូ។ អេស / ប៊ីន / ស្គ្រីបស្គ្រីប / តំឡើងសូដាដូ / usr / bin / ស្គ្រីបស្គ្រីបសូដូដូស៊ីអូអេសអូ / អេចអេសអេស / យូអេសអរ / ប៊ីន / ស្គ្រីបសូដូដូស៊ីអូអេសអូ / Purgecachache / usr / bin / Sudo CP CONFIG / បដា / etc / បដា ស៊ីឌី / usr / bin / Sudo Chmod A + X ធ្វើឱ្យសកម្ម Sudo Chmod A + X Backup Sudo Chmod A + X ASCR # ផ្ទុកឡើងវិញនិងបើកសេវាកម្ម អេកូ "" សេវាកម្មបើកដំណើរការ " Sudo DieMonctl-round ផ្ទុកឡើងវិញ sudo sudoctl អនុញ្ញាតឱ្យ Daphne.service Sudo Sudoctl អនុញ្ញាតឱ្យ Celery.service Sudoctll អនុញ្ញាតឱ្យ Celerybeat.service Sudoctll អនុញ្ញាតឱ្យ Clamav-Daemon Sudoctl ចាប់ផ្តើម daphne.service sudoctl ចាប់ផ្តើម celery.service Sudoctl ចាប់ផ្តើម Celerybeat.service Sudoctl ចាប់ផ្តើម clamav-daemon # បើកម៉ូឌុល Apache អេកូ "បើក Apache2" Sudo A2enMod Re Reitre sudo a2enmod wsgi បឋមកថា Sudo A2ENMOD Sudo A2enmod SSL ប្រូកស៊ី Sudo A2ENMOD sudo a2enmod proxy_balancer Sudo A2ENMOD Proxy_http sudo a2enmod proxy_wstunnel #sudo a2dismod mpm_event #Sudo A2DismD MPM_Worker #sudo a2enmod mpm_prefork # បិទគេហទំព័រលំនាំដើម Sudo A2Dissite 000- លំនាំដើម Sudo A2Dissite 000- លំនាំដើម -le-ssl # បើកគេហទំព័ររបស់យើង Sudo a2ensite femmebabe-le-ssl # ផ្ទុកដេមិនឡើងវិញហើយចាប់ផ្តើម Apache ឡើងវិញ, Postfix និង OpenDKIM Sudo DieMonctl-round ផ្ទុកឡើងវិញ Sudoctl ចាប់ផ្តើម Apache2 Sudoctl ចាប់ផ្តើមកម្មវិធី OpenDkim Postfix ឡើងវិញ Sudoctl ចាប់ផ្តើម daphne # កំណត់សិទ្ធិ Sudo Chown -r: www -ta data / var / var / www / www / Sudo chown -r: www -ta data/var/www/.deepacfe # ការកំណត់រចនាសម្ព័ន្ធស្វប អេកូ "ការបម្រុងទុកស្វបនេះអាចចំណាយពេលបន្តិច" sudo swapoff / swapfile sudo rm / swapfile Sudo Fromotox -l 8G / Swapfile sudo ddf = / dev / សូន្យនៃ = / Swapfile bs = 1024 រាប់ = 8388608 Sudo Chmod 600 / Swapfile sudo mkswap / swapfile swapon / swapfile អេកូ "" ប្តូរ SWAP លំនាំដើម SWAP 0 0 "| sudo tee -a / etc / fstab swapon swapon - បង្ហាញថា # ម៉ាស៊ីននិម្មិតចំណងជើង អេកូ "ការចាប់ផ្តើមចំណងជើងទម្លាប់" / Home / ក្រុម / FEMMEBABE / VENV / bin / Python / Hemhon / Hemhon / Homthev /Femebabebabebabebabebabebababe.py.py / ទំព័រដើម / ក្រុម / FepMebabe / Venv / bin / Python / Hemhon / Hemhon / Hemhon/FEMMEBABE/spybabe/seup_mail.py # តំឡើង git អេកូ "រៀបចំ git" ស៊ីឌី $ dir sudo rm -r .git git init init --initial- សាខា = មេ អេកូ "កំណត់ពាក្យសម្ងាត់អ្នកប្រើ" Sudo Usermod - Fassword $ (ក្រុមអេកូ | opensl passwd -1 -1 -stdin) # បង្ហាញ ipv6 និង OpenDKIM សម្រាប់ការកំណត់រចនាសម្ព័ន្ធដែន អេកូ "" ចម្លងព័ត៌មានខាងក្រោមទៅការកំណត់រចនាសម្ព័ន្ធដែន។ " ឈ្មោះម៉ាស៊ីន - ខ្ញុំ IP A | ហ្គ្រេនអ៊ិនធឺណិត IP -6 បន្ថែម addr | GREP "តំណភ្ជាប់វិសាលភាព" Sudo ឆ្មា /etc/opendkim/keys/femmebabebabebabebababe.com/sendonly.txt | TR -D '\ n' | sed 's / \ s // g' | sed 's / "" // g' | Awk -f '[) (]' '' {print $ 2} ' # ការរៀបចំបានបញ្ចប់ អេកូ "ការរៀបចំបានបញ្ចប់នៅក្នុង" ស្គ្រីប / ការរៀបចំ WC -l អេកូ "បន្ទាត់កូដ។ " អេកូ "ពេលវេលាសរុប:" រយៈពេល = $ វិនាទី អេកូ "$ ((រយៈពេល / 60) នាទីនិង $ ((((រយៈពេល% 60))) វិនាទីកន្លងទៅ។ " អេកូ "Todo:" អេកូ "" ចម្លងលើអាសយដ្ឋាន IPv6 ចំពោះការកំណត់រចនាសម្ព័ន្ធដែន DNS " អេកូ "" ចម្លងកូនសោដែនដែនទៅការកំណត់រចនាសម្ព័ន្ធដែនដែន " អេកូ "" - បន្ថែមឃ្លាំង GIT ថ្មីជាមួយនឹង GIT ពីចម្ងាយបន្ថែមប្រភពដើម។ " អេកូ "- ផតថលបើក 25" អេកូ "" តំឡើងកំចាត់មេរោគតាមការធ្វើផែនការឡើងវិញ " អេកូ "" សាកល្បង " អេកូ "ប្រសិនបើចំណោមសេះ" អេកូ - ការបំបាត់កំហុស " អេកូ "- ជួសជុលស្គ្រីបរៀបចំនិងបម្រុងទុក" អេកូ "- ជួសជុលម៉ាស៊ីនមេ" អេកូ "" អេកូ "សូមអរគុណចំពោះការប្រើកម្មវិធីតំឡើង Femmebabe ។ មានថ្ងៃដ៏អស្ចារ្យ!" របតិនិន្នាត
! / bin / bashcd project-directory-you-named # ស្គ្រីប Sudo Chmod A + X ស្គ្រីប / អ្នកប្រើប្រាស់
./scripts/usersetupssh-keygen
សៀវភៅគំរោងpython manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
កំណត់ហេតុពាក្យបញ្ជាnano config
កំណត់រចនាសម្ព័ន្ធ GITnano users/mfa.py
ធ្វើបច្ចុប្បន្នភាពនិងតំឡើងfrom django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken
account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER
def send_text(target_phone, text):
from twilio.rest import Client
try:
client = Client(account_sid, auth_token)
if len(target_phone) >= 11:
message = client.messages.create(
to=target_phone,
from_=source_phone,
body=text + ' Text STOP to cancel.')
except:
messages.warning(get_current_request(), 'There was an error sending the message.')
print(traceback.format_exc())
def get_num_length(num, length):
n = ''
for x in range(length):
n = n + str(num)
return int(n)
def send_verification_text(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))
def send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
def send_user_text(user, text):
send_text(user.profile.phone_number, text)
def check_verification_code(user, token, code):
token.attempts = token.attempts + 1
profile = user.profile
result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
if token.attempts < 3 and result:
profile.verification_code_length = 6
elif token.attempts > 1 and not result:
profile.verification_code_length = profile.verification_code_length + 2
if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
token.save()
profile.save()
return result
បើកការកំចាត់មេរោគ Clamav# ដាក់ឈ្មោះម៉ាស៊ីន
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # តំឡើង Postgres
if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # ដំឡើងការបម្រុងទុកមូលដ្ឋានទិន្នន័យ
user = User.objects.filter(id=token.user.id).first() # បិទ iptables
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # ដំឡើង Bitdefender
if not user: raise PermissionDenied() # តំឡើងប្រៃសណីយ៍
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # បង្កើតភាពរឹងមាំ
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # តំឡើង Virtuallenv
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # ទទួលបាននិងបង្កើតភាពអាស្រ័យ
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # កំណត់ច្បាប់ជញ្ជាំងភ្លើង
if not user.profile.mfa_enabled: # តំឡើងភាពអាស្រ័យរបស់ PYPI
if not check_verification_time(user, token): # == 4.5.4.60
user.profile.mfa_enabled = False # == 4.5.4.60
user.profile.enable_two_factor_authentication = True # PIP តំឡើង Opencv-Python == 4.5.5.64
user.profile.phone_number = '+1' # PIP តំឡើង Opencv Python Sainer == 4.5.5.64
user.profile.save() # ដំឡើង Cheattbot
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # ដំណើរការ CORTBOT
if request.method == 'POST' and not fraud_detect(request, True): # បញ្ចូលម៉ាស៊ីនបម្រើសំបុត្រឡើងវិញ
form = TfaForm(request.POST) # ច្បាប់ចម្លងចម្លង
code = str(form.data.get('code', None)) # Sudo CP /ETC/LETCYPTCYPTROMCYPTROR/FEMMEBABE.COMHSKEGHE.PEM PrivickKey.pem
if code and code != '' and code != None: # Sudo CP /ETC/LETCRECYPTROMCYPTROR/FEMMEBABEBABE.com/cert.pem cret.pem
token_validated = user.profile.check_auth_token(usertoken) # patch venv
is_verified = check_verification_code(user, token, code) # កំណត់ការកំណត់អ្នកប្រើ
if token_validated: # កំណត់សិទ្ធិ
if is_verified: # ក្រុម Sudo Chown -r: អ្នកប្រើប្រាស់ / វ៉ារ / រត់ /
user.profile.mfa_enabled = True # Sudo Chown Root: root / Run / Sudo / TS -r
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Sudo Chmod 664 DB.SQLite3
for key, value in request.GET.items(): # Sudo Chown www -ta: អ្នកប្រើប្រាស់ db.sqlite3
return HttpResponseRedirect(next) # កំណត់សិទ្ធិកំណត់និងកំណត់សិទ្ធិ
elif not token_validated: # ការតំឡើងមូលដ្ឋានទិន្នន័យ
if p.mfa_attempts > 3: # ចាក់ស៊ីមភីមនិងយកកំណត់រចនាសម្ព័ន្ធអេសអេសអេសអេស
if form.data.get('send_email', False): # Sudo Sed -I '' -e'e '$ d' /etc/pam.d/sshshd
# sudo sed -i '' '' '$ d' / etc / ប្រវត្តិរូប
ចំលងស្គ្រីបប៊ីននិងកំណត់សិទ្ធិផ្ទុកឡើងវិញនិងបើកដំណើរការសេវាកម្ម
បើកម៉ូឌុល Apachefrom .mfa import send_verification_email as send_mfa_verification_email
sudo a2dismod mpm_eventsudo a2dismod mpm_worker
sudo a2enmod mpm_preforknano users/mfa.py
បិទគេហទំព័រលំនាំដើមdef send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
បើកដំណើរការគេហទំព័ររបស់យើងផ្ទុកដេមិនឡើងវិញហើយចាប់ផ្តើម Apache ឡើងវិញ, Postfix និង OpenDKIM
កំណត់សិទ្ធិ# ការកំណត់រចនាសម្ព័ន្ធស្វប
from .tests import is_superuser_or_vendor # ម៉ាស៊ីនថតរូប
# តំឡើង GIT
return render(request, 'users/users.html', { # បង្ហាញ IPv6 និង OpenDKIM សម្រាប់ការកំណត់រចនាសម្ព័ន្ធដែន
ការរៀបចំបានបញ្ចប់នោះហើយជាការរៀបចំជាច្រើន! និយាយឱ្យខ្លីកំណត់ហេតុកំណត់ហេតុនេះកំណត់ពាក្យបញ្ជាណាណូនិង GIT, ថតចម្លងលើឯកសារទាញយកនិងតំឡើងកញ្ចប់ iptfel (ម៉ាស៊ីនមេទិន្នន័យ), ទាញយកឯកសារប្រឆាំងនឹងភាពស្មោះត្រង់, ដំឡើងវិញ្ញាបនប័ត្រ, តំឡើងវិញ្ញាបនប័ត្រនិងតំឡើងឯកសារ ម៉ាស៊ីនបម្រើតំឡើងការកំណត់រចនាសម្ព័ន្ធចាប់ផ្តើមនិងធ្វើឱ្យដើមបានបបូរទុកស្វបកំណត់សិទ្ធិនិងបោះពុម្ពអាសយដ្ឋាន IP, IPv6 និង opendkim key ។ សាមញ្ញយុត្តិធម៌ប៉ុន្តែវាមើលទៅដូចជាលេខកូដជាច្រើន។ យើងនឹងមិនត្រូវការច្រើនទេពីព្រោះយើងមិនមានភាពអាស្រ័យទេយើងមិនប្រើ Celery, Celerybeat ឬ Daphne ប៉ុន្តែយើងនឹងដំឡើងពួកគេមួយចំនួនដើម្បីចាប់ផ្តើម។ សូមកត់សម្គាល់ថាលេខកូដនេះមានដែនប្រកាសជាច្រើនដង។
យើងក៏នឹងត្រូវទិញឈ្មោះដែនមួយផងដែរ (ដែលជាថ្លៃសេវាប្រចាំឆ្នាំតូចមួយ) ។ ខ្ញុំសូមណែនាំឱ្យបញ្ឈប់ការយល់ព្រមសម្រាប់ការទិញដែនប្លង់របស់ពួកគេគឺវិចារណញាណនិងងាយស្រួលប្រើ។ អ្នកអាចទិញដែនណាមួយនៃជម្រើសរបស់អ្នកប៉ុន្តែខ្ញុំកំពុងប្រើដែន Femmebabe.com ក្នុងឧទាហរណ៍នេះ។ នៅពេលដែលអ្នកបានទិញដែន, ឆ្ពោះទៅកាន់ផ្ទាំងកំណត់រចនាសម្ព័ន្ធ DNS Squarespace និងបន្ថែមកំណត់ត្រាមួយដែលចង្អុលបង្ហាញដែនរបស់អ្នកទៅម៉ាស៊ីនមេដោយអាសយដ្ឋាន IP ។ វាគួរតែមើលទៅដូចនេះ:def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
@ a xx.xx.xx.xx.xxxជាមួយនឹងប្រតិបត្តិករ @ ក្នុងនាមជាម៉ាស៊ីនមានន័យថាដែនរងទាំងអស់ក្រោមដែននេះនិងដែន root នឹងប្តូរទៅម៉ាស៊ីនមេ។ មានកំណត់ត្រាជាច្រើនទៀតដែលត្រូវប្រកាសប៉ុន្តែយើងអាចបន្តដំណើរទៅមុខទៀតនៅពេលដែលយើងត្រៀមខ្លួនផ្ញើសំបុត្រ។ សូមចងចាំវាអាចចំណាយពេលច្រើនថ្ងៃមុនពេលអ្នកអាចផ្ញើអ៊ីមែលពីម៉ាស៊ីនមេដោយជោគជ័យដោយជោគជ័យ។ កំណត់ត្រា DNS ដែលយើងកំពុងកំណត់នឹងត្រូវការពេលវេលាដើម្បីឃោសនា។
ទោះយ៉ាងណាកំណត់ត្រាតែមួយគត់ដែលយើងត្រូវការគឺកំណត់ត្រាមួយ។ ដូច្នេះឥឡូវនេះយើងអាចបំពេញក្នុងអត្ថបទខាងក្រោមនេះបើយោងតាមគម្រោងរបស់យើងហើយដំណើរការវា។
សូមចាប់ផ្តើមជាមួយនឹងស្គ្រីបដំឡើងតូចជាងមុនដើម្បីដំឡើងអ្វីដែលយើងត្រូវការសម្រាប់ការរីកចម្រើនមូលដ្ឋាន។ យើងនឹងមិនប្រើភាពអាស្រ័យឬ PostgreSQL ច្រើនទេយើងនឹងចាប់ផ្តើមបង្កើតម៉ាស៊ីនមេ HTTP ហើយបារម្ភពីការបញ្ជាក់វានៅពេលដែលបានធ្វើ។ សូមចាំថាដើម្បីទទួលបានវិញ្ញាបនប័ត្រ HTTPS ហើយដំណើរការម៉ាស៊ីនបម្រើដោយសុវត្ថិភាពយើងនឹងត្រូវទិញដែនរួមជាមួយជួលម៉ាស៊ីនមេ។ សម្រាប់ពេលនេះជំនួស "ក្រុម" ក្នុងឯកសារនេះដោយមានឈ្មោះអ្នកប្រើរបស់អ្នក "dir" ជាមួយថតនៃគម្រោងរបស់អ្នកនិងផ្គត់ផ្គង់អ៊ីមែលនិងដែនរបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នកក្នុងស្លាក <> ស្លាករបស់អ្នក។លើសពីនេះទៀតមុនពេលដែលយើងដំណើរការលេខកូដនេះយើងត្រូវផ្លាស់ប្តូរការកំណត់ទៅនឹងជញ្ជាំងភ្លើងរបស់អ្នកផ្តល់សេវាបង្ហោះអ្នកផ្តល់ការគាំទ្រប្រសិនបើមាន។ ជាធម្មតាវាស្ថិតនៅក្នុងផ្ទាំង 'បណ្តាញ' នៃអ្នកផ្តល់សេវាបង្ហោះរបស់អ្នកឬប្រសិនបើអ្នកកំពុងបង្ហោះខ្លួនវានៅក្នុងផ្នែក 'កំពង់ផែបញ្ជូនបន្ត' នៃរ៉ោតទ័ររបស់អ្នក។ អ្នកក៏នឹងចង់រៀបចំអាយភីស្តាអាយតាមរយៈរ៉ោតទ័ររបស់អ្នកដោយប្រើអាសយដ្ឋានរបស់ម៉ាស៊ីនម៉ាស៊ីនមេរបស់អ្នកប្រសិនបើអ្នកកំពុងប្រើគេហទំព័រដោយខ្លួនឯង។ អ្នកនឹងត្រូវបើកច្រកខាងក្រោមសម្រាប់ការចូលអាន / សរសេរ។22 (អេសអេសអេស) 25 (សំបុត្រ) 587 (សំបុត្រ) 110 (អតិថិជនអ៊ីមែល) 80 (http) 443 (HTTPS)#! / ធុងសំរាម / ប៊ីស វិនាទី = 0 Python_version = 3.12 អេកូ "កម្មវិធីដំឡើង Fembabe បានចាប់ផ្តើម។ " dir = "/ ផ្ទះ / ក្រុម /" អ្នកប្រើប្រាស់ = "ក្រុម" # កំណត់ហេតុពាក្យបញ្ជា អេកូ "ពាក្យបញ្ជាកាប់ឈើ" Sudo CP Log / Constrs.log /var/log/Commands.log Sudo Chmod -r a + W / var / log Sudo Chown -r: syslog / var / log អេកូ $ "ឈ្មោះហៅក្រៅ =" ប្រភព / ផ្ទះ / ក្រុម / FEMMEBABE / VENV / Bin / Activate "'| Sudo tee -a /home/team/.profile អេកូ $ "Mept_Command = \ 'the logger -p locling6.deoc6.de.debug [$ (whounmi): $ sed [[0-9] \ + [[] ^ /'" Sudo tee -a / etc / bashrc អេកូ $ "Mept_Command = \ 'the logger -p locling6.deoc6.de.debug [$ (whounmi): $ sed [[0-9] \ + [[] ^ /'" Sudo Tee -a "/ Home/team/.bashrc" អេកូ $ "Mept_Command = \ 'the logger -p locling6.deoc6.de.debug [$ (whounmi): $ sed [[0-9] \ + [[] ^ /'" Sudo Tee -a /root/.bashrc អេកូ "" ប្រភព / etc / bashrc "| Sudo tee -a /home/team/.profile អេកូ "/var/log/Commands.log" | Sudo Tee -a /etc/logrotate.d/syslog អេកូ "loc ur local6 ។ * /var/log/Commands.log" | Sudo Tee -a "/etc/rsyslog.d/bash.conf" សេវាកម្ម sudo rsyslog ចាប់ផ្តើមឡើងវិញ # Nano config អេកូ "កំណត់ផ្ទាំងផ្ទាំង 4" >> .Nanorc អេកូ "កំណត់ Tabstpackaces" >> .Nanorc # កំណត់រចនាសម្ព័ន្ធ GIT អេកូ "ការកំណត់រចនាសម្ព័ន្ធ GIT" Sudo Git Confignge --global user.email "@ gmail.com" && sudo git config_global us.name git config inform - logadd - defect.directory $ "$ dri" Sudo SSH-Keyscan -t rsa gitlab.com | Sudo Tee -a /root/.ssh/kkkown_Hosts Sudo SSH-Keyscan -t rsa github.com | Sudo Tee -a /root/.ssh/kkkown_Hosts # ធ្វើបច្ចុប្បន្នភាពនិងតំឡើង អេកូ "" ធ្វើបច្ចុប្បន្នភាពនិងតំឡើងកញ្ចប់ " Sudo Apt ធ្វើឱ្យទាន់សម័យនិង & sudo tefitestart_mode = ការធ្វើឱ្យប្រសើរឡើង apt -hyy PostgreSQL-comment-applate postgresq អេកូ "" Postfix Postfix ខ្សែអក្សរ Femmebabe.com "| Sudo debconf-set-set-settion អេកូ "" Postfix Postfix / Main_Mailer_TEPE "គេហទំព័រអ៊ីធឺណិត" | Sudo debconf-set-set-settion Sudo TestRestart_Mode = Debian_frontend = ការតំឡើង Apt Apt ដែលមិនទាក់ទាញ Sudo TustRestart_Mode = APT ATTUTUMP-DRKHUNAR CLBX264-DEV FFMACH2-Wenv Python3- Pip Python3-Django រំពឹងថានឹងមាន OpenJDK-8-JDK Redis-Server Libeif-Dev Python3-Dev OpenDkim Open-Ippormail Postmasql Postmast Postmast Cretbot Python3- Cretbot-Apache # បើកការកំចាត់មេរោគ Clamav អេកូ "ចាប់ផ្តើមកំចាត់មេរោគ" Sudoctll អនុញ្ញាតឱ្យ Clamav-Daemon Sudoctl ចាប់ផ្តើម clamav-daemon # កំណត់ឈ្មោះម៉ាស៊ីន អេកូ "127.0.0.1 Femmebabe" | Sudo Tee -a / etc / ម្ចាស់ម៉ាស៊ីន Sudo Hestingly កំណត់ - ឈ្មោះម៉ាស៊ីន Femmebabe # ការបម្រុងទុកមូលដ្ឋានទិន្នន័យដំឡើងមូលដ្ឋានទិន្នន័យ អេកូ "" បង្កើតមូលដ្ឋានទិន្នន័យពីការបម្រុងទុក, នេះអាចចំណាយពេលបន្តិច "។ ឆ្មា db.json ។ ?? > db.json អេកូ "កំណត់រចនាសម្ព័ន្ធជញ្ជាំងភ្លើង" Sudo UFW លំនាំដើមអនុញ្ញាតឱ្យចេញ Sudo UFW លំនាំដើមបដិសេធការចូល Sudo UFW អនុញ្ញាតឱ្យ 22 Sudo UFW អនុញ្ញាតឱ្យ HTTP Sudo UFW អនុញ្ញាតឱ្យ HTTPS Sudo UFW អនុញ្ញាត 'Postfix' Sudo UFW អនុញ្ញាត 'Postfix SMTPS' Sudo UFW អនុញ្ញាត 'Postfix ការដាក់ស្នើ' Sudo UFW អនុញ្ញាតឱ្យ 'DOVECOT POP3' Sudo UFW អនុញ្ញាតឱ្យមានសុវត្ថិភាពរបស់ Dovecot POP3 ' Sudo UFW អនុញ្ញាតឱ្យមាន 110 / TCP Sudo UFW អនុញ្ញាតឱ្យមាន 25 / TCP អេកូ "អ៊ី" | Sudo UFW បើក # បិទ IPTable អេកូ "កំណត់រចនាសម្ព័ន្ធជញ្ជាំងភ្លើង" ការទទួលយក IPTABER -P ទទួលយក Sudo iptables -p ទទួលយកលទ្ធផល Sudo iptables -p នឹងទទួលបានការបញ្ជូនបន្ត Sudo iptable -f Sudo iptable-Save បាន # តំឡើង Virtuallenv ស៊ីឌី $ dir អេកូ "បង្កើតបរិយាកាសនិម្មិត" ពស់ថ្លាន់ -m venv venv venv ប្រភព Venv / bin / Active pip3 upstin install -r តម្រូវការតម្រូវការ # តំឡើង Cheatbot អេកូ "ដំឡើងវិញ្ញាបនបត្រ" sudo snap ដំឡើងស្នូល; sudo ខ្ទាស់ធ្វើឱ្យស្រស់ Sudo Snap តំឡើង - CRETCLASTIC Sudo LN -s / snap / bin / cretbot / usr / bin / bin / creatbot Sudo Snap ដំឡើង Redis Sudoctl អនុញ្ញាតឱ្យ Apache2 Sudoctl ចាប់ផ្តើម Apache2 # ដំណើរការ CHARTBOT Sudo Credbot -APache --non- អន្តរកម្ម - tos-tos-domains femmebabe.com - email @ gmail.com # កំណត់ការកំណត់អ្នកប្រើប្រាស់ Sudo GPasswd -a អ្នកប្រើប្រាស់ www -ata # កំណត់សិទ្ធិ អេកូ "ការកំណត់សិទ្ធិ" ក្រុម Sudo Chown -r -r: ឃ្លាំងសម្ងាត់អ្នកប្រើប្រាស់ / Sudo Chmod A + RWX -R ឃ្លាំងសម្ងាត់ / ក្រុម #sudo Chown -r -r: អ្នកប្រើប្រាស់ / វ៉ារ / រត់ / #sudo Chown root: root / run / sudo / ts -r Sudo Chown -R Redis: Redis / var / lib / Redis Sudo Chown -R Redis: Redis / var / log / Redis Sudo Chmod -r u + RWX, G + RWX, u + RX / Var / log / Redis Sudo Chmod + R /etc/redis/redis.conf ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ / var / log / Sudo Chown -R: អ្នកប្រើប្រាស់ ../ Sudo Chmod -r G + RWX ./ sudo chmod -r g + rx ../ Sudo Chmod -r G-RWX ../.SSH Sudo Chmod 774 ./ Sudo chown -r www-dator: www-unjapteration media / Sudo Chown www -ta: អ្នកប្រើប្រាស់ ./ ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ប្រព័ន្ធផ្សព្វផ្សាយ / ក្រុម Sudo Chown -r -r: អ្នកប្រើប្រាស់ ./ # ផ្ទុកឡើងវិញនិងបើកសេវាកម្ម អេកូ "" សេវាកម្មបើកដំណើរការ " Sudo DieMonctl-round ផ្ទុកឡើងវិញ Sudoctll អនុញ្ញាតឱ្យ Clamav-Daemon Sudoctl ចាប់ផ្តើម clamav-daemon # បើកម៉ូឌុល Apache អេកូ "បើក Apache2" Sudo A2enMod Re Reitre sudo a2enmod wsgi បឋមកថា Sudo A2ENMOD Sudo A2enmod SSL ប្រូកស៊ី Sudo A2ENMOD sudo a2enmod proxy_balancer Sudo A2ENMOD Proxy_http sudo a2enmodProxy_wstunnenel # ផ្ទុកដេមិនឡើងវិញហើយចាប់ផ្តើម Apache ឡើងវិញ, Postfix និង OpenDKIM Sudo DieMonctl-round ផ្ទុកឡើងវិញ Sudoctl ចាប់ផ្តើម Apache2 Sudoctl ចាប់ផ្តើមកម្មវិធី OpenDkim Postfix ឡើងវិញ # បង្ហាញ ipv6 និង OpenDKIM សម្រាប់ការកំណត់រចនាសម្ព័ន្ធដែន អេកូ "" ចម្លងព័ត៌មានខាងក្រោមទៅការកំណត់រចនាសម្ព័ន្ធដែន។ " ឈ្មោះម៉ាស៊ីន - ខ្ញុំ IP A | ហ្គ្រេនអ៊ិនធឺណិត IP -6 បន្ថែម addr | GREP "វិសាលភាព
! / bin / bashកំណត់ហេតុពាក្យបញ្ជា
nano config <small># កំណត់រចនាសម្ព័ន្ធ GIT
ធ្វើបច្ចុប្បន្នភាពនិងតំឡើងបើកការកំចាត់មេរោគ Clamav
ដាក់ឈ្មោះម៉ាស៊ីន
ដំឡើងការបម្រុងទុកមូលដ្ឋានទិន្នន័យបិទ iptables
តំឡើង Virtuallenv# ដំឡើង Cheattbot
success_url = '/' # ដំណើរការ CORTBOT
def test_func(self): # កំណត់ការកំណត់អ្នកប្រើ
កំណត់សិទ្ធិក្រុម Sudo Chown -r: អ្នកប្រើប្រាស់ / វ៉ារ / រត់ /
Sudo Chown Root: root / Run / Sudo / TS -rផ្ទុកឡើងវិញនិងបើកដំណើរការសេវាកម្ម
បើកម៉ូឌុល Apachenano users/urls.py
ផ្ទុកដេមិនឡើងវិញហើយចាប់ផ្តើម Apache ឡើងវិញ, Postfix និង OpenDKIMបង្ហាញ IPv6 និង OpenDKIM សម្រាប់ការកំណត់រចនាសម្ព័ន្ធដែន
មុនពេលដំណើរការលេខកូដនេះសូមប្រាកដថាដែនដែលអ្នកបានទិញត្រូវបានភ្ជាប់ទៅម៉ាស៊ីនមេ។ ដើម្បីធ្វើដូចនេះបើកស្ថានីយនៅលើម៉ាស៊ីនក្នុងស្រុករបស់អ្នកហើយដំណើរការពាក្យបញ្ជានេះជាមួយដែនរបស់អ្នក:# Ping Femmebabe.com # បញ្ចូលដែនរបស់អ្នកនៅទីនេះបន្ទាប់ពីភីង
# បញ្ចូលដែនរបស់អ្នកនៅទីនេះបន្ទាប់ពីភីង
ប្រសិនបើមើលទៅល្អហើយម៉ាស៊ីនមេកំពុងផ្ញើការឆ្លើយតបយើងបានត្រៀមខ្លួនរួចរាល់ហើយក្នុងការដំណើរការស្គ្រីបហើយតំឡើងកញ្ចប់ក៏ដូចជាការចាប់ផ្តើមបើកនិងបញ្ជាក់ម៉ាស៊ីនមេ Apache របស់យើង។នេះមិនមែនជាការរៀបចំទាំងអស់ដែលត្រូវការដើម្បីកំណត់រចនាសម្ព័ន្ធ PostFix ទេយើងនឹងពិនិត្យមើលការរៀបចំនោះឱ្យនៅពេលក្រោយ។ សម្រាប់ពេលនេះសូមដំណើរការលេខកូដតំឡើងនេះហើយវាគួរតែចំណាយពេលពីរបីនាទីដើម្បីដំឡើងនិងបញ្ជាក់ម៉ាស៊ីនមេរបស់អ្នក។ ជាថ្មីម្តងទៀតត្រូវប្រាកដថាជំនួសឈ្មោះអ៊ីមែលនិងឈ្មោះដែនក្នុងស្គ្រីបយោងទៅតាមឈ្មោះដែលអ្នកបានទិញ។
ឥឡូវម៉ាស៊ីនមេត្រូវបានផ្តល់ជូនអ្នកអាចចូលទៅកាន់ URL នៅក្នុងកម្មវិធីអ៊ីនធឺណិតណាមួយហើយពិនិត្យមើលដើម្បីប្រាកដថាម៉ាស៊ីនមេដំណើរការ HTTPS ។ ប្រសិនបើវាមិនមែនទេសូមព្យាយាមរង់ចាំបន្តិចសម្រាប់កំណត់ត្រា DNS ដើម្បីចាប់បានហើយបន្ទាប់មកដំណើរការពាក្យបញ្ជាខាងក្រោមដើម្បីព្យាយាមវិញ្ញាបនប័ត្រ Chetbot Sertry:sudo backup
Sudo Credbot -Pache --non-Interpactive - tos-tos-domains .com email @ gmail.comដរាបណាអ្នកបានកំណត់រចនាសម្ព័ន្ធអ្វីគ្រប់យ៉ាងឱ្យបានត្រឹមត្រូវអ្នកគួរតែអាចចូលមើលទំព័រលំនាំដើមរបស់ Apache គ្រាន់តែដឹងកូដរបស់អ្នកកំពុងដំណើរការនិងបង្ហាញគេហទំព័រផ្សាយផ្ទាល់។ បន្ទាប់សូមកែសម្រួលការកំណត់ការកំណត់ - ដើម្បីផ្លាស់ប្តូររបៀបបំបាត់កំហុសលំនាំដើមរបស់យើងទៅនឹងផលិតកម្ម។ យើងក៏នឹងកំណត់រចនាសម្ព័ន្ធដែននៅក្នុងការកំណត់ក៏ដូចជាអាយភីខាងក្នុង។
nano yourProject / settings.pyនៅក្នុងការកំណត់ផ្លាស់ប្តូរ / បន្ថែមបន្ទាត់ទាំងនេះ។
debug = មិនពិត # កំណត់រចនាសម្ព័ន្ធគេហទំព័រ គេហទំព័រ item_name = 'femmeabe' ពិធីសារ = 'https' ដែន = 'femmebabe.com' site_id = 1 Base_url = ពិធីការ + ':: //' + + ដែន បានអនុញ្ញាត = HOSTS = [ដែន] ផ្ទៃក្នុង _ips = [ 'xx.xx.xx.xx' តមយយរសយលកំណត់រចនាសម្ព័ន្ធគេហទំព័រ
ឥឡូវនេះយើងនឹងត្រូវកំណត់រចនាសម្ព័ន្ធ Apache2 ។ តោះកែសម្រួលឯកសារកំណត់រចនាសម្ព័ន្ធដែលយើងនឹងដាក់ពង្រាយជាមួយខ្សែនេះ:ស៊ូដូណាណូ / ដានស៊ី / ទីណា-10/sites-available/femmebabe-le-ssl.conf
ឯកសារកំណត់រចនាសម្ព័ន្ធនេះគួរតែមានឈ្មោះដែនរបស់យើងនៅក្នុងវាហើយឈ្មោះអ្នកប្រើនិងគម្រោង។ ខ្ញុំកំពុងប្រើឈ្មោះដែន Femmebabe.com, ក្រុមឈ្មោះអ្នកប្រើ, ហើយគម្រោងគម្រោងឈ្មោះ Femmebabe ។semmerigngreature បិទ servertuTens ផលិតផល ប្តូរទិសអចិន្រ្តៃយ៍ / https://femmebabe.com/ servername femmebabe.com serveradmin team@femmebabe.com CheaTootRoot / var / www / html restrolg $ {apache_log_dir} /error.log បញ្ចូលទឹកប្រាក់ដុល្លារ {apache_log_dir} / access.log រួមបញ្ចូលគ្នា ឈ្មោះក្លែងក្លាយ / ឋិតិវន្ត / គេហដ្ឋាន / ក្រុម / FemMebabe / ឋិតិវន្ត តម្រូវឱ្យទទួលបានទាំងអស់ ឈ្មោះក្លែងក្លាយ / ប្រព័ន្ធផ្សព្វផ្សាយ / រូបតំណាង / ផ្ទះ / ក្រុម / FEMMEBABE / Media / តម្រូវឱ្យទទួលបានទាំងអស់ តម្រូវឱ្យទទួលបានទាំងអស់ wsgiscriptalias / / Home/team/femmebabe/femebabe/wsgi.py WSGIDAEMEMAMAMAMASSS FEMTHON-PARCH = / Home / Feedbabe / Python-Home = / Home / Team-Hever-Buffer ទំហំ = 100000000000 អ្នកប្រើប្រាស់ = ក្រុមអ្នកប្រើប្រាស់ = ក្រុមអ្នកប្រើប្រាស់ = ក្រុមអ្នកប្រើប្រាស់ = ក្រុម wsgiCrocessgroup femmebabe wsgiaplicationgroup% {សកល} ជម្រើសលិបិក្រមជម្រើស Talmymlymss Allowoverride ទាំងអស់ Rewriteengine នៅលើ RewitecondecondeCondeConde %% {Uss_uri} \ ។ (CSS | WebP | WebG | PNG | WAV | JPG | WebP) $ [NC] Rewitecondecond%% {http_referer}! ^ https: //femmebababe.com/media/. disk$ [NC] អ្នកនិពន្ធសរសេរឡើងវិញ ^ (។ +?) / $ / មេឌៀ / 1 ដុល្លារ 1 ដុល្លារ [អេហ្វអេល] រួមបញ្ចូល /etc/lesencrybytre/option-ssl-apache.conf SSLCertificateTefile /etc/letsencryby/live/fepmebababe.com/ifullochain.pem SSLCERTIFIFEGHEFILEFILE /etc/letsencryby/live/fievebabebababe.com/privkey.pem បឋមកថាកំណត់ X-Frame-Forws: "Waldorigin" បឋមកថាកំណត់ការចូលប្រើការត្រួតពិនិត្យ - អនុញ្ញាត "HTTPS ://femmebabe.com" អស់ពេល 60000 listrequequestbledhestes 0 បឋមកថាកំណត់ឃ្លាំងសម្ងាត់ - វត្ថុបញ្ជា "អាយុអតិបរមា = 30, សាធារណៈ" servername femmebabe.com serveradmin team@femmebabe.com CheaTootRoot / var / www / html restrolg $ {apache_log_dir} /error.log បញ្ចូលទឹកប្រាក់ដុល្លារ {apache_log_dir} / access.log រួមបញ្ចូលគ្នា Rewriteengine នៅលើ Rewitecondecond%% serv server_name} = FEMMEBABE.com ការសរសេរឡើងវិញនូវ https: //% {ឈ្មោះ server_name}% {onfout_uri} [ចុងបញ្ចប់, ne, un, r = អចិន្រ្តៃយ៍ = អចិន្រ្តៃយ៍ = អចិន្រ្តៃយ៍ =
ត្រូវប្រាកដថាជំនួសឈ្មោះគម្រោងថតនិងដែនក្នុងកូដឧទ្យាននេះនៅពេលកំណត់ម៉ាស៊ីនមេរបស់អ្នក។ ឥឡូវនេះយើងនឹងត្រូវបិទគេហទំព័រលំនាំដើម។ នេះអាចត្រូវបានធ្វើដោយប្រើបាស។Sudo A2Dissite 000- លំនាំដើម -le-ssl Sudo A2Dissite 000- លំនាំដើម sudo a2dissite លំនាំដើម - SSL
បន្ទាប់យើងអាចបើកដំណើរការតំបន់បណ្ដាញលំនាំដើមនិងផ្ទុក apache2 ឡើងវិញដោយប្រើ bash ផងដែរ។ ចងចាំថាត្រូវជំនួស Femmebabe ដែលមានឈ្មោះរបស់ឯកសារដែលអ្នកបានប្រកាសនៅពេលកែសម្រួលក្នុង / etc / apache2 / គេហទំព័រ - មាន / ។Sudo a2ensite femmebabe-le-ssl Sudoctl ផ្ទុក Apache2
ត្រលប់ទៅដែនរបស់អ្នកវិញនៅណាបរៀល។ អ្នកគួរតែមើលគេហទំព័រដែលអ្នកបានតំឡើងនៅក្នុងកម្មវិធីអ៊ីនធឺណិតរបស់អ្នក។ អបអរសាទរ! ប្រសិនបើអ្នកមិនឃើញវាអ្នកប្រហែលជាត្រូវធ្វើការផ្លាស់ប្តូរមួយចំនួន។ ពិនិត្យឡើងវិញដោយប្រុងប្រយ័ត្ននូវការកំណត់នៅក្នុងគម្រោងរបស់អ្នកការកំណត់រចនាសម្ព័ន្ធកម្មវិធី Apache ហើយត្រូវប្រាកដថាអ្នកមិនមានកំហុសណាមួយហើយដំណើរការពាក្យបញ្ជាខាងក្រោមដើម្បីពិនិត្យមើលគម្រោងសម្រាប់កំហុស។ssh-keygen
ឈ្មោះស៊ីឌី
ប្រភព Venv / bin / Active
ការត្រួតពិនិត្យ Manhon Manage.pyប្រសិនបើអ្នកមានកំហុសក្នុងគម្រោង Python របស់អ្នកសូមតាមដានពួកគេទៅកន្លែងដែលពួកគេស្ថិតនៅនិងជួសជុលវា។ អ្នកប្រហែលជាមិនអាចមើលឃើញកំហុសទាំងអស់របស់អ្នកអាស្រ័យលើកន្លែងដែលពួកគេមានដូច្នេះប្រសិនបើអ្នកមានកំហុសដែលនិយាយថា "ភាគរយមិនមានតំលៃឡើងវិញ", កែសម្រួលឯកសារខាងក្រោមនៅក្នុងបរិស្ថាននិម្មិត, regist.py, ដើម្បីបង្ហាញកំហុស។
Nano venv / lib / python3.12 / តំបន់បណ្តាញកញ្ចប់ / Django / Apps / reg icrecat ~/.ssh/id_rsa.pub
រំកិលទៅបន្ទាត់ទី 83 ដែលមានកំហុសក្នុងការរត់នេះត្រូវបានលើកឡើង (បង្កើនម៉ោង () មិនមានភាពវង្វេងស្មារតីទេ) ហើយបន្ថែមមតិយោបល់មុនពេលបន្ទាត់នេះបន្ទាប់មកបន្ថែមដោយប្រើ Mail.App_Configs = {} ។ នេះមើលទៅដូចនេះ:ប្រសិនបើការផ្ទុកទំនិញ។ ការផ្ទុកទំនិញ: # ការពារការហៅទូរស័ព្ទ Reentrant ដើម្បីជៀសវាងការរត់ AppConfig.reade () # វិធីសាស្រ្តពីរដង។ # បង្កើនម៉ោងរត់ ("បរិមាណ () មិនមានការកើនឡើងទេ") mely.app_configs = {} ការបើកបរដោយខ្លួនឯង = ពិត
បងា្ករការហៅទូរស័ព្ទមកជៀសវាងការរត់ AppConfig.reade ()ssh-keygen -t rsa -b 4096
វិធីសាស្រ្តពីរដង។ដំឡើងម៉ោងរត់ ("បរិមាណ () មិនមានការកើនឡើងទេ")
បន្ទាប់មកអ្នកអាចពិនិត្យមើលគម្រោងម្តងទៀតហើយលាតត្រដាងកំហុស។ssh ubuntu@XX.XX.XX.XX
ការត្រួតពិនិត្យ Manhon Manage.pyបន្ទាប់មកអ្នកអាចមើលឃើញកំហុសហើយជួសជុលវា។ នៅពេលអ្នកជួសជុលវាហើយក្រមចងក្រងដោយគ្មានកំហុសត្រូវប្រាកដថាផ្លាស់ប្តូរឯកសារត្រឡប់មកវិញដូច្នេះវាមើលទៅដូចនេះ:
ប្រសិនបើការផ្ទុកទំនិញ។ ការផ្ទុកទំនិញ: # ការពារការហៅទូរស័ព្ទ Reentrant ដើម្បីជៀសវាងការរត់ AppConfig.reade () # វិធីសាស្រ្តពីរដង។ ដំឡើងម៉ោងរត់ ("បរិមាណ () មិនមានការកើនឡើងទេ") # mely.app_configs = {} ការបើកបរដោយខ្លួនឯង = ពិតបងា្ករការហៅទូរស័ព្ទមកជៀសវាងការរត់ AppConfig.reade ()
វិធីសាស្រ្តពីរដង។nano sshd_config
mely.app_configs = {}# បានផ្តល់ឱ្យម៉ាស៊ីនមេគឺនៅលើអ៊ីនធឺណិតនៅពេលដែលយើងធ្វើការផ្លាស់ប្តូរបន្ថែមទៀតចំពោះវាយើងត្រូវប្រើពាក្យបញ្ជាខាងក្រោមដើម្បីផ្ទុកម៉ាស៊ីនបម្រើឡើងវិញ:
# Sudoctl ផ្ទុក Apache2
# អស្ចារ្យមែន! ប៉ុន្តែចុះយ៉ាងណាចំពោះការផ្ញើអ៊ីមែល? ដើម្បីចាប់ផ្តើមផ្ញើអ៊ីមែលយើងត្រូវធ្វើបច្ចុប្បន្នភាពការកំណត់រចនាសម្ព័ន្ធដែន។ នេះគួរតែនៅក្នុងផ្ទាំងឈ្មោះ DNS របស់អ្នកក្នុង Squarespace ឬអត្រានុកូលដ្ឋានឈ្មោះដែនរបស់អ្នកដែលអ្នកបានជ្រើសរើស។ យើងក៏នឹងត្រូវតំឡើងនិងបន្ថែមការកំណត់រចនាសម្ព័ន្ធហើយដំណើរការពាក្យបញ្ជាពីរបី។
# ដំបូងសូមទទួលបានអាសយដ្ឋាន IPv6 របស់ម៉ាស៊ីនមេ។ បន្ទាប់មកយើងនឹងបើក DNS របស់អ្នកហើយបន្ថែមកំណត់ត្រា។
# ដើម្បីទទួលបានអាសយដ្ឋាន IPv6 របស់ម៉ាស៊ីនមេសូមប្រើពាក្យបញ្ជានេះ:
# IP -6 បន្ថែម
# ឥឡូវនេះយើងអាចបន្ថែមកំណត់ត្រាខាងក្រោមទៅការកំណត់ DNS ។ កំណត់ត្រារបស់ខ្ញុំមើលទៅដូចនេះ។ ទោះយ៉ាងណាក៏ដោយសម្រាប់កំណត់ត្រារបស់អ្នកអ្នកគួរតែជំនួសអាសយដ្ឋាន IP ជាមួយ IP របស់អ្នក (មិន 75.18.182.214 នោះជារបស់ខ្ញុំ) ។ បន្ថែមដែនរបស់អ្នកផងដែរជំនួសឱ្យ Femmebabe.com ក៏ដូចជាអាសយដ្ឋាន IPv6 របស់អ្នកដែលបានរកឃើញជាមួយនឹងពាក្យបញ្ជាមុន (អ្នកមិនអាចប្រើអណ្តូងរ៉ែ ,: 725A: FFF: FF49: 3e02) ។ កុំបារម្ភអំពី the0eykey សម្រាប់ពេលនេះនេះត្រូវបានបង្កើតឡើងនៅពេលយើងតំឡើងប្រៃសណីយ៍ម៉ាស៊ីនមេម៉ែលដែលមាន OpenDKIM ហើយបោះពុម្ពកូនសោរ។ យើងនឹងតំឡើងចុងក្រោយនេះ។
# @
នៃក
n / a
75.147.18.214
# @
ចឹម
10
femmebabe.com
# @
ភីធីធី
n / a
femmebabe.com
# @
txt
n / a
txt @ v = spf1 MX MX MX IP75.147.214IP6: FF80 :: 725A: FFF: FF49: 3e02 ~ ទាំងអស់
# លំនាំដើម ._bimi
txt
n / a
v = bimi1; l = https: //femmebabebabe.com/dedia/static/femmebabebabe.svg
# _dmarc
txt
n / a
v = dmarc1; p = គ្មាន
# ឥឡូវនេះយើងត្រូវបន្ថែមការកំណត់រចនាសម្ព័ន្ធបន្តមួយចំនួនសម្រាប់ Postfix ។ អ្វីដែលយើងត្រូវធ្វើគឺត្រូវប្រាកដថាយើងជំនួសឈ្មោះដែន, femmebabe.com, ជាមួយនឹងឈ្មោះដែនដែលអ្នកកំពុងប្រើ។ សូមក្រឡេកមើលឯកសារកំណត់រចនាសម្ព័ន្ធទាំងអស់មួយដោយមួយហើយដំឡើងវានៅក្នុងថតមួយដែលគេហៅថា config នៅក្នុងគម្រោងរបស់យើងសម្រាប់ដំឡើងទៅប្រព័ន្ធប្រតិបត្តិការ។
# nano config / etc_postfix_main.cf
# បន្ថែមអត្ថបទនេះទៅឯកសារ
# # មើល /usr/share/postfix/main.cf.dist សម្រាប់ការអត្ថាធិប្បាយ, កំណែពេញលេញ
# Deban ជាក់លាក់: បញ្ជាក់ឈ្មោះឯកសារនឹងបណ្តាលឱ្យដំបូង
# បន្ទាត់នៃឯកសារនោះដែលត្រូវប្រើជាឈ្មោះ។ លំនាំដើមដេបៀន
# គឺ / etc / mailename ។
#myorigin = / etc / mailemame
SmTPD_BANNER = $ MYHOSTNAME esmtp $ mail_name (អ៊ូប៊ុនទូ)
biff = ទេ
# ការបន្ថែមការកើនឡើងគឺជាការងាររបស់ MUA ។
បន្ថែម appenddot_mydomain = ទេ
# ការមិនចូលចិត្តបន្ទាប់ដើម្បីបង្កើតការព្រមាន "សំបុត្រដែលបានពន្យារពេល"
#Delay_warning_Time = 4H
Readme_directory = ទេ
# សូមមើល http://www.postfix.org/compatibility_readme.html - លំនាំដើមទៅ 3.6 នៅលើ
# តំឡើងស្រស់។
ភាពសមាហរណកម្ម Quattive_level = 3.6
ប៉ារ៉ាម៉ែត្រ TLS
smtpd_tls_cert_file = / etc / letsencry / live / femmebabe.com / flebchain.pem
smtpd_tls_key_file = / etc / letsencry / live / femmebabe.com / converkey.pem
smtpd_tls_security_level = អាច
smtp_tls_capath = / etc / ssl / វិញ្ញាបនប័ត្រ
smtp_tls_sess_sess_cache_database = btree: $ {data_directory} / smtp_sache
SmTPD_RELAY_RESTRICTING = SINTER_SASL_Authenticate, deper_unauthe_destragination
myHostname = Femmebabe.com
alias_maps = hash: / etc / ailes
alias_database = hash: / etc / ailes
Myorigin = / etc / mailemame
MyDestination = Femmebabe.com, localhost, $ myhostname
smtp_helo_name = Femmebabe.com
MyNetworks = 127.0.0.0/8 [:FFFF:127.0.0.0.0.0 [: 1] / 128
ប្រអប់សំបុត្រប្រអប់ប្រអប់សំបុត្រ = 0
អ្នកទទួល _delimiter = +
inet_interfaces = ទាំងអស់
inet_protocols = ទាំងអស់
# ការកំណត់រចនាសម្ព័ន្ធមីចទ័រ
Milter_default_art = ទទួលយក
Milter_protocol = 6
Smtpd_milters = ក្នុងស្រុក: / ការ opendkim/opendkim.sock
មិនមែន _smtpd_milters = $ smtpd_milters
smtp_tls_security_level = អ៊ិនគ្រីប
smtp_tls_loglevel = 1
Virtual_Transport = LMTP: យូនីក: ឯកជន / DOVECOT-LMTP
SmTPD_SASL_PAT = ឯកជន / អភ័យប្រយុន
# មើល /usr/share/postfix/main.cf.dist សម្រាប់ការអត្ថាធិប្បាយ, កំណែពេញលេញ
# ដេបៀនជាក់លាក់: បញ្ជាក់ឈ្មោះឯកសារនឹងបណ្តាលឱ្យដំបូង
# បន្ទាត់នៃឯកសារនោះដែលត្រូវប្រើជាឈ្មោះ។ លំនាំដើមដេបៀន
# គឺ / etc / maileame ។
# Myorigin = / etc / mailemame
# ការបន្ថែមអាំងណុនគឺជាការងាររបស់ MUA ។
# មិនចូលចិត្តបន្ទាត់បន្ទាប់ដើម្បីបង្កើតការព្រមាន "ការពន្យារពេល" សំបុត្រ "
# delop_warning_time = 4h
# សូមមើល http://www.postfix.org/compatibility_readme.html - លំនាំដើមទៅ 3.6 នៅលើ
# ដំឡើងស្រស់។
# ប៉ារ៉ាម៉ែត្រ TLS
# ការកំណត់រចនាសម្ព័ន្ធ Milter
# កំណត់រចនាសម្ព័ន្ធបន្ទាប់!
# nano config / etc_postfix_master.cf
# បន្ថែមបន្ទាត់ទាំងនេះ:
# #
# ឯកសារកំណត់រចនាសម្ព័ន្ធដំណើរការម៉ាស្ទ័ររបស់ Postfix ។ សម្រាប់ព័ត៌មានលម្អិតស្តីពីទ្រង់ទ្រាយ
ចំនួនឯកសារសូមមើលមេ (5) ទំព័រ (ពាក្យបញ្ជា: "Man 5 មេ" ឬ
# នៅលើអ៊ីនធឺណិត: http://www.postfix.org/master.5.html) ។
#
# កុំភ្លេចប្រតិបត្តិ "Postfix Retroad" បន្ទាប់ពីកែសម្រួលឯកសារនេះ។
#
# ================================================================================================================ '
# សេវាកម្មវាយបញ្ចូលពាក្យបញ្ជាដែលមិនធ្លាប់មានរបស់អ្នកដែលមិនធ្លាប់មាន
# (បាទ / ចាស) (បាទ / ចាស) (ទេ) (មិនដែល) (100)
# ================================================================================================================ '
SMTP INET N - Y - - SMTPD
#sptp iNET N - Y - Ovenle PostScreen
#sptpd pass - - y - - smtpd
# utnsblog យូនីក - - y - 0 dnsblog
#tlesproxy យូនីក - - y - 0 tlsproxy
# ជ្រើសយកមួយ: បើកការដាក់ស្នើអតិថិជនរង្វិលជុំ Loopback តែប៉ុណ្ណោះឬសម្រាប់អតិថិជនណាមួយ។
# 127.0.0.1: ការដាក់ស្នើ INET N - Y - - SMTPD
ការដាក់ស្នើ INET N - Y - - SMTPD
-o smtpd_relay_Restriction = Sile_sasl_authenticate, បដិសេធ
-o smtpd_reecicient_restricients = Sift_sasl_authenticate, បដិសេធ
-o syslog_name = postfix / ការដាក់ស្នើ
-o smtpd_tls_security_level = អ៊ិនគ្រីប
-o smtpd_tls_wrappermode = ទេ
-o smtpd_sasl_autable = បាទ
-o smtpd_sasl_type = dovecot
-o smtpd_sasl_path = ឯកជន / អភ័យប្រយុន
# oo syslog_name = postfix / ការដាក់ស្នើ
# oO smtpd_tls_security_level = អ៊ិនគ្រីប
# - smtpd_sasl_autable = បាទ
# អូ'o smtpd_tls_auth_only = បាទ
# -o smtpd_reject_unlisted_recient = ទេ
# -o smtpd_client_restriction = $ mua_client_Reient_Restriction
# oo smtpd_helo_restricanction = $ mua_helo_restrictions
# -o smtpd_sens_restric_restriction = $ mua_sens_rerstric_restric
# អូ 'អូ SMTPD_RECIFINE_RESTRICING =
# អូ SMTPD_RELAY_RELEANGING = SILTER_SASL_Authenticate សូមបដិសេធ
# -o Milter_Macro_daem_naem_name = មានដើមកំណើត
# ជ្រើសរើសមួយ: បើកម៉ាស៊ីន SMTP សម្រាប់អតិថិជនរង្វិលជុំតែប៉ុណ្ណោះឬសម្រាប់អតិថិជនណាមួយ។
# 127.0.1: SMTPS INET N - Y - - SMTPD
#smtps INET N - Y - - SMTPD
# up syslog_name = postfix / smtps
# - a smtpd_tls_wrappermode = បាទ
# - smtpd_sasl_autable = បាទ
# -o smtpd_reject_unlisted_recient = ទេ
# -o smtpd_client_restriction = $ mua_client_Reient_Restriction
# oo smtpd_helo_restricanction = $ mua_helo_restrictions
# -o smtpd_sens_restric_restriction = $ mua_sens_rerstric_restric
# អូ 'អូ SMTPD_RECIFINE_RESTRICING =
# អូ SMTPD_RELAY_RELEANGING = SILTER_SASL_Authenticate សូមបដិសេធ
# -o Milter_Macro_daem_naem_name = មានដើមកំណើត
# 628 អ៊ិនធឺណិត n - y - - QMQPD
PECKUP UNIX N - Y 60 1 1
សម្អាតយូនីក n - y - 0 សម្អាត
QMgr Unix n - n 300 1 QMGR
#qmgr យូនីក n - n 300 1 Oqmgr
Tlsmgr យូនីក - - y 1000? 1 tlsmgr
សរសេរយូនីកឡើងវិញ - - អ៊ី - - - សរសេរឡើងវិញ
លោតយូនីក - - y - 0 លោត
ពន្យារបស់យូនីក - - y - 0 លោត
ដានយូនីក - - y - 0 លោត
ផ្ទៀងផ្ទាត់យូនីក - - y - 1 ផ្ទៀងផ្ទាត់
flush yx n - y 1000? 0 អួត
Proxymap យូនីក - - n - - proxymap
ProxyWrite Unix - - n - 1 ប្រូកស៊ី
SMTP យូនីក - - y - - SMTP
បញ្ជូនបន្តយួរយូនីក - - អ៊ី - - smtp
-o syslog_name = Postfix / $ server_name
# -o smtp_helo_timeout = 5 -o smtp_connect_etyout = 5
Showq យូនីក n - y - - showq
កំហុសយូនីក - - អ៊ី - - កំហុស
ព្យាយាមយូនីកឡើងវិញ - អ៊ី - - - កំហុស
បោះបង់ចោលយូនីក - - អ៊ី - - បោះចោល
យូនីកក្នុងស្រុក - n n - - ក្នុងស្រុក
យូនីកយូនីកនិម្មិត - n n - - និម្មិត
lmtp យូនីក - - y - - lmtp
anvil យូនីក - - y - 1 Anvil
scache inix - - y - 1 scache
PostLog Unix-DGRAM N - N - PostLogd
#
# ================================================================================= '
# ចំណុចប្រទាក់ទៅកម្មវិធីដែលមិនមែនជាកម្មវិធីបន្ទាប់។ ត្រូវប្រាកដថាពិនិត្យមើលសៀវភៅដៃ
# ទំព័រនៃកម្មវិធីដែលមិនមែនក្រោយប្រព័ន្ធដើម្បីរកឱ្យឃើញនូវជម្រើសអ្វីដែលវាចង់បាន។
#
# សេវាកម្មជាច្រើនខាងក្រោមប្រើការចែកចាយបំពង់ក្រោយដៃ (8)
# ភ្នាក់ងារ។ សូមមើលទំព័រ PIP (8) Man Page សម្រាប់ព័ត៌មានអំពីព័ត៌មានអំពី $ {អ្នកទទួល}
# និងជម្រើសស្រោមសំបុត្រសារផ្សេងទៀត។
# ================================================================================= '
#
# maildrop ។ សូមមើលឯកសារ Postfix Maildrop_readme សម្រាប់ព័ត៌មានលម្អិត។
# ក៏បានបញ្ជាក់ផងដែរនៅ Main.cf: MailDrop_deStination_Recicient_limit = 1
#
Maildrop Unix - nn - - បំពង់
ទង់ជាតិ = lexhu អ្នកប្រើប្រាស់ = vmail argv = / usr / bin / maildrop -d $ {អ្នកទទួល}
#
# ================================================================================= '
#
# កំណែស៊ីរូសថ្មីៗអាចប្រើ "LMTP" ដែលមានស្រាប់ "។
#
# បញ្ជាក់នៅ Cyrus.conf:
# lmtp cmd = "lmtpd -a" ស្តាប់ = "localhost: lmtp" proto = tcp4
#
# បញ្ជាក់នៅ Main.CF មួយរឺច្រើនដូចខាងក្រោម:
# ប្រអប់សំបុត្រប្រអប់សំបុត្រ = LMPTP: INET: Localhost
# Virtual_Transport = LMTP: INET: Localhost
#
# ================================================================================= '
#
# Cyrus 2.1.5 (អេម៉ុសហ្គូសច)
# ក៏បានបញ្ជាក់ផងដែរនៅ Main.cf: Cyrus_deStination_Recicient_limit = 1
#
# ynix ynix - n n - - បំពង់
# អ្នកប្រើទង់ = Cyrus = Cyrus Argv = / Cyrus / bin / Trea -e -r $ {អ្នកប្រើ} $ {អ្នកប្រើប្រាស់} $}
#
# ================================================================================= '
# ឧទាហរណ៍ចាស់នៃការចែកចាយតាមរយៈស៊ីរូស។
#
# លេខចាស់ - ភាសាប - អិន - - - បំពង់
# អ្នកប្រើទង់ជាតិ = Cyrus = Cyrus Argv = / Cyrus / bin / Prupe -e -m $ {ផ្នែកបន្ថែម} $ {អ្នកប្រើប្រាស់}
#
# ================================================================================= '
#
# សូមមើលឯកសារ Postfix Uucp_readme សម្រាប់ព័ត៌មានលម្អិតអំពីការកំណត់រចនាសម្ព័ន្ធ។
#
UUCP យូនីក - n n - - បំពង់
ទង់ជាតិ = FQHU USER = UUCP regnv = uux -r-z-z-z-u $ $ reuge - $ nexthop! rmail (ដុល្លារ)
#
# វិធីសាស្រ្តដឹកជញ្ជូនខាងក្រៅផ្សេងទៀត។
#
IFMAIN MIX - N n - - បំពង់
ទង់ = F = FTN Argv = / usr / lib / if immail / ifmail -r $ Nexthop (អ្នកទទួលប្រាក់ $)
bsmtp យូនីក - n n - - បំពង់
ទង់ = FQ ។ អ្នកប្រើប្រាស់ = BSMTP Argv = / usr / lib / bsmtp / bsmtp -t $ nexthop -f $ អ្នកផ្ញើប្រាក់រាប់ដុល្លារ
recumail-backend utix - n n - 2 បំពង់
ទង់ជាតិ = អ្នកប្រើ R ArgeMail Argv = / usr / lib / recemail / bin / recalemail $ {user} $ {ការគាំទ្រ}
Mailman Unix - n n - - បំពង់
ទង់ = FRX អ្នកប្រើប្រាស់ = បញ្ជី Argv = / usr / lib / mailman / postfix-to-mailman.py $ {nexthop}
#
# ឯកសារកំណត់រចនាសម្ព័ន្ធដំណើរការមេរបស់ Postfix ។ សម្រាប់ព័ត៌មានលម្អិតស្តីពីទ្រង់ទ្រាយ
# នៃឯកសារសូមមើលមេ (5) ទំព័រ (ពាក្យបញ្ជា: "Man 5 មេ" ឬ
# នៅលើអ៊ីនធឺណិត: http://www.postfix.org/master.5.html) ។
#
# កុំភ្លេចប្រតិបត្តិ "optfix ផ្ទុកឡើងវិញ" បន្ទាប់ពីកែសម្រួលឯកសារនេះ។
#
# =======================================================================================================================================================================================================================================================)
# ប្រភេទសេវាកម្មប្រភេទឯកជនភាពឯកជន Walep Walep ពាក្យបញ្ជា MaxProc + អាគុយម៉ង់
# (មែន) (បាទ / ចាស) (ទេ) (មិនដែល) (100)
# =======================================================================================================================================================================================================================================================)
# SMTP INET N - Y - Open SoxSccreen
# SmTPD ឆ្លងកាត់ - - អ៊ី - - SmTPD
# DNSBlog យូនីក - - y - 0 dnsblog
# Tlsproxy យូនីក - - y - 0 tlsproxy
# ជ្រើសរើសមួយ: បើកការដាក់ស្នើអតិថិជនរង្វង់រង្វិលជុំតែប៉ុណ្ណោះឬសម្រាប់អតិថិជនណាមួយ។
# 127.0.0.1 ៈអ៊ីម៉ែល n - y - y - y - - smtpd
# -o syslog_name = postfix / ការដាក់ស្នើ
# -o smtpd_tls_security_level = អ៊ិនគ្រីប
# -o smtpd_sasl_autable = បាទ
# -o smtpd_tls_auth_only = មែន
# -o smtpd_reject_unlisted_recient = ទេ
# -o smtpd_client_restriction = $ mua_client_rentric_restriction
# -o smtpd_helo_restriction = $ mua_helo_restrictions
# -o smtpd_sensen_restricsion = $ MUA_SERS_RENESTINCENS
# -o smtpd_recient_restrictions =
# -o smtpd_relay_Restriction = Sile_sasl_authenticate, បដិសេធ
# -o Milter_macro_daem_naem_name = មានដើមកំណើត
# ជ្រើសរើសមួយ: បើកម៉ាស៊ីន SMTP សម្រាប់អតិថិជនរង្វិលជុំតែប៉ុណ្ណោះឬសម្រាប់អតិថិជនណាមួយ។
# 127.0.0.1:smtps INET N - Y - - SMTPD
# SMTPS Inet N - Y - - SmTPD
# -o syslog_name = postfix / smtps
# -o smtpd_tls_wrappermode = បាទ
# -o smtpd_sasl_autable = បាទ
# -o smtpd_reject_unlisted_recient = ទេ
# -o smtpd_client_restriction = $ mua_client_rentric_restriction
# -o smtpd_helo_restriction = $ mua_helo_restrictions
# -o smtpd_sensen_restricsion = $ MUA_SERS_RENESTINCENS
# -o smtpd_recient_restrictions =
# -o smtpd_relay_Restriction = Sile_sasl_authenticate, បដិសេធ
# -o Milter_macro_daem_naem_name = មានដើមកំណើត
# 628 អ៊ិនធឺណិតអិន - អ៊ី - - Qmqpd
# QMgr Unix n - n 300 1 Oqmgr
# -o SMTP_HHELO_TIET = 5 -o smtp_connect_etyout = 5
#
# ================================================================================================================================================================================================================================================== '
# ចំណុចប្រទាក់ចំពោះកម្មវិធីដែលមិនមែនជារបស់ Postfix ។ ត្រូវប្រាកដថាពិនិត្យមើលសៀវភៅដៃ
# ទំព័រនៃកម្មវិធីដែលមិនមែនជារបស់ PostFix ដើម្បីរកឱ្យឃើញនូវជម្រើសអ្វីដែលវាចង់បាន។
#
# ភាគច្រើននៃសេវាកម្មខាងក្រោមប្រើការចែកចាយបំពង់ក្រោយប៉ុស្តិ៍ (8)
# ភ្នាក់ងារ។ សូមមើលទំព័រ PIP (8) Man Page សម្រាប់ព័ត៌មានអំពីព័ត៌មានអំពី $ {អ្នកទទួល}
# និងជម្រើសស្រោមសំបុត្រសារផ្សេងទៀត។
# ================================================================================================================================================================================================================================================== '
MailDrop ។ សូមមើលឯកសារ Postfix Maildrop_readme សម្រាប់ព័ត៌មានលម្អិត។
សូមបញ្ជាក់ផងដែរនៅក្នុង Main.cf: MailDrop_deStination_Recient_limit = 1nano initialize
# កំណែស៊ីរូសថ្មីៗអាចប្រើ "LMTP" ដែលមានស្រាប់ "។
បញ្ជាក់នៅ Cyrus.conf:
lmtp cmd = "lmtpd -a" ស្តាប់ = "localhost: lmtp" proto = tcp4បញ្ជាក់នៅក្នុង Main.cf មួយឬច្រើនដូចខាងក្រោម:
ssh team@XX.XX.XX.XX
ប្រអប់សំបុត្រប្រអប់សំបុត្រ - អិលធីធី = អិមអិមៈអ៊ិនធឺណិតៈអេមធីតនិម្មិត Virtual_transport = LMTP: INET: Localhost
================================================================================================================================================================================================================================================== '
cat ~/.ssh/id_rsa.pub
Cyrus 2.1.5 (អេម៉ុសហ្គូច)សូមបញ្ជាក់ផងដែរនៅក្នុង Main.cf: Cyrus_deStination_Recient_limit = 1
git clone git://github.com/you/yourproject.git
Cyrus Unix - n n - - បំពង់ទង់ជាតិ = អ្នកប្រើ DROX = Cyrus Argv = / Cyrus / bin / Trea -e -r $ {អ្នកប្រើ} $ {អ្នកប្រើប្រាស់} $}
ls
================================================================================================================================================================================================================================================== 'ឧទាហរណ៍ចាស់នៃការចែកចាយតាមរយៈស៊ីរូស។
cp -r yourproject whatyoucalledit
unix ចាស់ unix - n n - - បំពង់ទង់ជាតិ = អ្នកប្រើ R = Cyrus Argv = / Cyrus / bin / Heart -e -m $ {ផ្នែកបន្ថែម} $ {អ្នកប្រើប្រាស់}
sudo nano /usr/bin/ascript
================================================================================================================================================================================================================================================== 'សូមមើលឯកសារ Postfix Uucp_readme សម្រាប់ព័ត៌មានលម្អិតអំពីការកំណត់រចនាសម្ព័ន្ធ។
#
echo "#
វិធីសាស្ត្រចែកចាយខាងក្រៅផ្សេងទៀត។និងការកំណត់រចនាសម្ព័ន្ធ OpenDKIM ។ OpenEnkim កំណត់អត្តសញ្ញាណម៉ាស៊ីនមេអ៊ីម៉ែលដែលមានគ្រាប់ចុចដែនដើម្បីធ្វើឱ្យវាកាន់តែមានសុវត្ថិភាព។ បើគ្មានវាទេសំបុត្រមិនត្រូវបានចុះហត្ថលេខាហើយអាចនឹងមិនធ្វើឱ្យវាទៅប្រអប់ទទួលទេ។
sudo chmod a+x /usr/bin/ascript
Nano config / etc_default_opendkimបន្ថែមបន្ទាត់ទាំងនេះ:
# សំគាល់ៈនេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធកេរដំណែល។ វាមិនត្រូវបានប្រើដោយ OpenDKIM # សេវាប្រព័ន្ធ។ សូមប្រើប៉ារ៉ាម៉ែត្រកំណត់រចនាសម្ព័ន្ធដែលត្រូវគ្នាក្នុង # /etc/opendkim.cinf ជំនួសវិញ។ # # ពីមុនម្នាក់នឹងកែសម្រួលការកំណត់លំនាំដើមនៅទីនេះហើយបន្ទាប់មកអាចប្រតិបត្តិបាន # orib/opendkim//opendkim.serviceate ដើម្បីបង្កើតឯកសារបដិសេធប្រព័ន្ធប្រព័ន្ធនៅ # /etc/systemd/system//pendkim.service.conf និង # /etc/tmpfiles.d/opendkim.conf ។ ខណៈពេលដែលនេះនៅតែអាចធ្វើបានវាឥឡូវនេះ # បានផ្ដល់អនុសាសន៍ឱ្យកែតម្រូវការកំណត់ដោយផ្ទាល់ក្នុង /etc/opendkim.cinf ។ # # ដេមិន _opts = "" # ផ្លាស់ប្ដូរទៅ / var / spool / postfix / runfix / run / opendkim ដើម្បីប្រើរន្ធយូនីកជាមួយ # Postfix ក្នុង chroot: # Rundir = / var / spool / postfix / runfix / run / opendkim Rundi = / រត់ / OpenDKIM # # ការមិនចូលចិត្តដើម្បីបញ្ជាក់រន្ធជំនួស # ចំណាំថាការកំណត់វានឹងបដិសេធរាល់តម្លៃរន្ធនៅក្នុង Opendkim.conf # លំនាំដើម: រន្ធ = "ក្នុងស្រុក: /var/spool/postfix/opendkim/opendkimim.sock" # ស្តាប់ចំណុចប្រទាក់ទាំងអស់នៅលើច្រក 54321: # រន្ធ = iNet: 54321 # ស្តាប់នៅលើរង្វិលជុំនៅលើច្រក 12345: # រន្ធ = iNet: 12345 @ localhost # ស្តាប់នៅថ្ងៃទី 192.0.2.1 នៅលើច្រក 12345: # រន្ធ = iNet: 12345@192.0.2.1 អ្នកប្រើ = OpenDKIM ក្រុម = OpenWIKIM Podfile = $ rundir / $ bame.pid បន្ថែមទៀត =# សម្គាល់ៈនេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធកេរ្តិ៍ដំណែល។ វាមិនត្រូវបានប្រើដោយ OpenDKIM
# សេវាកម្មប្រព័ន្ធ។ សូមប្រើប៉ារ៉ាម៉ែត្រកំណត់រចនាសម្ព័ន្ធដែលត្រូវគ្នាក្នុង
# /etc/opendkim.conf ជំនួសវិញ។
#
# កាលពីមុនមួយនឹងកែសម្រួលការកំណត់លំនាំដើមនៅទីនេះហើយបន្ទាប់មកអនុវត្ត
# /lib/opendkim//pendkim.serviceate ដើម្បីបង្កើតឯកសារបដិសេធប្រព័ន្ធ
# /etc/systemd/system/pendkim.service.conf និង
# /etc/tmpfiles.d/opendkim.conf ។ ខណៈពេលដែលនេះនៅតែអាចធ្វើបានវាឥឡូវនេះ
# ណែនាំឱ្យកែតម្រូវការកំណត់ដោយផ្ទាល់ក្នុង /etc/opendkim.conf ។
#
# daemon_opts = ""
# ផ្លាស់ប្តូរទៅ / var / spool / postfix / run / run / run / opendkim ដើម្បីប្រើរន្ធយូនីកជាមួយ
# Postfix ក្នុង chroot:
# Rundi = / var / spool / postfix / run / run / opendkim
#
# មិនចូលចិត្តដើម្បីបញ្ជាក់រន្ធជំនួស
# ចំណាំថាការកំណត់វានឹងបដិសេធរាល់តម្លៃរន្ធនៅក្នុង OpenDkim.conf
# លំនាំដើម:
# សូមស្តាប់ចំណុចប្រទាក់ទាំងអស់នៅលើច្រក 54321:
# រន្ធ = iNet: 54321
# ស្តាប់នៅលើរង្វិលជុំនៅលើច្រក 12345:
pip3 install --upgrade opencv-python # រន្ធ = iNet: 12345 @ localhost
pip3 install --upgrade opencv-contrib-python # ស្តាប់នៅឆ្នាំ 192.0.2.1 នៅលើច្រក 12345:
# រន្ធ = iNet: 12345@192.0.2.1
# Nano config / etc_dovecot_conf.d_10-matcher.conf
# បន្ថែមបន្ទាត់ទាំងនេះ:
# 0- MASTERS.CONF
#default_process_limit = 100
#default_client_limit = 1000
# លំនាំដើម VSZ (ទំហំសតិនិម្មិត) កំណត់សម្រាប់ដំណើរការសេវាកម្ម។ នេះជាចម្បង
# មានបំណងចាប់និងសម្លាប់ដំណើរការដែលលេចធ្លាយមុនពេលពួកគេញ៉ាំ
# អ្វីៗទាំងអស់។
#default_vsz_limit = 256 ម
# អ្នកប្រើចូលត្រូវបានប្រើនៅខាងក្នុងដំណើរការចូល។ នេះគឺជាការមិនទុកចិត្តបំផុត
# អ្នកប្រើប្រាស់ក្នុងប្រព័ន្ធឌុយ។ វាមិនគួរមានលទ្ធភាពទទួលបានអ្វីទាំងអស់។
#default_login_user = dovenull
# អ្នកប្រើប្រាស់ផ្ទៃក្នុងត្រូវបានប្រើដោយដំណើរការដែលមិនមានកំហុស។ វាគួរតែដាច់ដោយឡែកពីគ្នាពី
# ចូលអ្នកប្រើដូច្នេះដំណើរការចូលមិនអាចរំខានដំណើរការផ្សេងទៀតបានទេ។
#default_internal_user = Dovecot
សេវាកម្ម IMAP- ចូល {
inet_listener IMAP {
#port = 143
បាន
inet_listener Imaps {
#port = 993
#ssl = បាទ
បាន
ចំនួននៃការតភ្ជាប់ដើម្បីដោះស្រាយមុនពេលចាប់ផ្តើមដំណើរការថ្មី។ តាមធម្មតា
# តម្លៃដែលមានប្រយោជន៍តែមួយគត់គឺ 0 (គ្មានដែនកំណត់) ឬ 1 ។ 1 មានសុវត្ថិភាពជាងនេះទៀតហើយប៉ុន្តែ 0
# លឿនជាងមុន។
#service_count = 1
# ចំនួននៃដំណើរការដើម្បីបន្តរង់ចាំការតភ្ជាប់កាន់តែច្រើន។
#pocess_min_avail = 0
# ប្រសិនបើអ្នកកំណត់សេវាកម្ម _Count = 0 អ្នកប្រហែលជាត្រូវការដាំដុះវា។
#vsz_limit = $ deast_vsz_limit
បាន
សេវាកម្ម POP3- ចូល {
inet_listener pop3 {
#port = 110
បាន
inet_listener pop3s {
#port = 995
#ssl = បាទ
បាន
បាន
សេវាកម្មការបញ្ជូន - ចូល {
inet_listener ដាក់ស្នើ {
#port = 587
បាន
បាន
សេវាកម្ម LMTP {
unix_listener / var / spool / postfix / ឯកជន / dovecot-lmtp {
ក្រុម = Postfix
របៀប = 0666
អ្នកប្រើ = Postfix
បាន
# បង្កើតអ្នកស្តាប់ INET ប្រសិនបើអ្នកមិនអាចប្រើរន្ធយូនីកខាងលើ
#inet_listener LMTP {
# ជៀសវាងការធ្វើឱ្យ LMTP អាចមើលឃើញសម្រាប់អ៊ីនធឺណិតទាំងមូល
#dress =
#port =
#}
បាន
សេវាកម្ម IMAP {
# អង្គចងចាំភាគច្រើនចូលទៅកាន់ឯកសារ MMAP () ឯកសារ ing ។ អ្នកប្រហែលជាត្រូវបង្កើនរឿងនេះ
# កំណត់ប្រសិនបើអ្នកមានប្រអប់សំបុត្រដ៏ធំ។
#vsz_limit = $ deast_vsz_limit
# អតិបរមា។ ចំនួននៃដំណើរការ IMAP (ការតភ្ជាប់)
#process_limit = 1024
បាន
សេវាកម្ម POP3 {
# អតិបរមា។ ចំនួននៃដំណើរការ POP3 (ការតភ្ជាប់)
#process_limit = 1024
បាន
ការដាក់ស្នើសេវាកម្ម {
# អតិបរមា។ ចំនួនដំណើរការនៃការដាក់ស្នើ SMTP (ការតភ្ជាប់)
#process_limit = 1024
បាន
សេវាកម្មអាន់ឌ័រ {
# auth_socket_path ចង្អុលទៅរន្ធអ្នកប្រើគេហទំព័រនេះតាមលំនាំដើម។ វាជាធម្មតា
# ប្រើដោយ DOVECOT-LDA, Doveadm, អាចជាដំណើរការ IMAP, ។ ល។ អ្នកប្រើប្រាស់ដែលមាន
# សិទ្ធិពេញទៅរន្ធនេះអាចទទួលបានបញ្ជីឈ្មោះអ្នកប្រើទាំងអស់និង
# ទទួលបានលទ្ធផលនៃការរកមើលអ្នកប្រើរបស់អ្នកទាំងអស់គ្នា។
#
# របៀបលំនាំដើម 0666 អនុញ្ញាតឱ្យអ្នកណាម្នាក់ភ្ជាប់ទៅរន្ធប៉ុន្តែ
# ការរកមើលអ្នកប្រើរបស់អ្នកប្រើនឹងទទួលបានជោគជ័យប្រសិនបើអ្នកប្រើរបស់អ្នកប្រើប្រាស់ត្រឡប់វាល "UID" នោះ
# ត្រូវនឹង UID របស់អ្នកទូរស័ព្ទចូល។ ក៏ប្រសិនបើអ្នកហៅទូរស័ព្ទរបស់អ្នកទូរស័ព្ទចូលឬ GID ត្រូវគ្នានឹងឯកសារ
# របស់រន្ធឬ jid រកឃើញជោគជ័យ។ អ្វីផ្សេងទៀតបណ្តាលឱ្យបរាជ័យ។
#
# ដើម្បីផ្តល់សិទ្ធិឱ្យអ្នកទូរស័ព្ទចូលដើម្បីរកមើលអ្នកប្រើប្រាស់ទាំងអស់កំណត់របៀប
# មានអ្វីផ្សេងទៀតជាង 0666 និងឌូវ៉ូតអនុញ្ញាតឱ្យខឺណែលពង្រឹងឯកសារ
# ការអនុញ្ញាត (E.G. 0777 អនុញ្ញាតឱ្យអ្នករាល់គ្នាមានសិទ្ធិពេញលេញ) ។
unix_listener / var / spool / postfix / ឯកជន / auth {
របៀប = 0660
អ្នកប្រើ = Postfix
ក្រុម = Postfix
បាន
បាន
សេវាកម្មអវត្តមានរបស់កម្មករ {
# ដំណើរការរបស់កម្មករនិយោជិតកំពុងរត់ជា root តាមលំនាំដើមដូច្នេះវាអាចចូលដំណើរការបាន
# / etc / ស្រមោល។ ប្រសិនបើមិនចាំបាច់អ្នកប្រើប្រាស់គួរតែត្រូវបានប្តូរទៅ
# $ លំនាំដើម _INTONAL_USER ។
# rooter = ឫស
បាន
សេវាកម្ម did {
# ប្រសិនបើប្រូកស៊ី NONCR ត្រូវបានប្រើដំណើរការសំបុត្រគួរតែមានលទ្ធភាពចូលប្រើរន្ធរបស់វា។
# ឧទាហរណ៍: របៀប = 0660, ក្រុម = vam mail_access_groups = vamil
Unix_listener dic {
#mode = 0600
#user =
# Group =
បាន
បាន
# Default_Process_limit = 100
# Default_client_limit = 1000
# លំនាំដើម VSZ (ទំហំសតិនិម្មិត) ដែនកំណត់សម្រាប់ដំណើរការសេវាកម្ម។ នេះជាចម្បង
# មានបំណងចាប់និងសម្លាប់ដំណើរការដែលលេចធ្លាយការចងចាំមុនពេលពួកគេញ៉ាំ
# អ្វីៗទាំងអស់។
# Defauld_vsz_limit = 256 ម
# អ្នកប្រើចូលត្រូវបានប្រើនៅខាងក្នុងដំណើរការចូល។ នេះគឺជាការមិនទុកចិត្តបំផុត
# អ្នកប្រើក្នុងប្រព័ន្ធឌុយឌីត។ វាមិនគួរមានលទ្ធភាពទទួលបានអ្វីទាំងអស់។
# Default_login_user = ដូឌូលលូល
# អ្នកប្រើប្រាស់ផ្ទៃក្នុងត្រូវបានប្រើដោយដំណើរការដែលមិនមានកំហុស។ វាគួរតែដាច់ដោយឡែកពីគ្នាពី
# ចូលអ្នកប្រើដូច្នេះដំណើរការចូលមិនអាចរំខានដំណើរការផ្សេងទៀតបានទេ។
# Default_Internal_user = dovecot
# កំពង់ផែ = 143
# កំពង់ផែ = 993
# SSL = បាទ
# ចំនួននៃការតភ្ជាប់ដើម្បីដោះស្រាយមុនពេលចាប់ផ្តើមដំណើរការថ្មី។ តាមធម្មតា
# តម្លៃមានប្រយោជន៍តែមួយគត់គឺ 0 (គ្មានដែនកំណត់) ឬ 1 ។ 1 មានសុវត្ថិភាពជាងនេះទៀតហើយប៉ុន្តែ 0
# គឺលឿនជាងមុន។ <ដុក / វីគី / logypocess.txt>
# service_count = 1
# ចំនួននៃដំណើរការដើម្បីបន្តរង់ចាំការតភ្ជាប់កាន់តែច្រើន។
# ដំណើរការ _min_avail = 0
# ប្រសិនបើអ្នកកំណត់សេវាកម្ម _Count = 0 អ្នកប្រហែលជាត្រូវការដាំដុះវា។
# vsz_limit = $ destle_vsz_limit
# កំពង់ផែ = 110
# កំពង់ផែ = 995
# SSL = បាទ
# កំពង់ផែ = 587
# បង្កើតអ្នកស្តាប់ INET ប្រសិនបើអ្នកមិនអាចប្រើរន្ធយូនីកខាងលើ
# inet_listener lmtp {
# ជៀសវាងការធ្វើឱ្យ LMTP អាចមើលឃើញសម្រាប់អ៊ីនធឺណិតទាំងមូល
# អាសយដ្ឋាន =
ច្រក =បាន
សតិភាគច្រើនចូលទៅកាន់ឯកសារ MMAP () ឯកសារ ing ។ អ្នកប្រហែលជាត្រូវបង្កើនរឿងនេះដែនកំណត់ប្រសិនបើអ្នកមានប្រអប់សំបុត្រដ៏ធំមួយ។
vsz_limit = $ destle_vsz_limitអតិបរមា។ ចំនួននៃដំណើរការ IMAP (ការតភ្ជាប់)
ដំណើរការ _limit = 1024អតិបរមា។ ចំនួននៃដំណើរការ POP3 (ការតភ្ជាប់)
ដំណើរការ _limit = 1024អតិបរមា។ ចំនួនដំណើរការនៃការដាក់ស្នើ SMTP (ការតភ្ជាប់)
ដំណើរការ _limit = 1024ចំណុច Auth_Socket_Path ចង្អុលទៅរន្ធអ្នកប្រើអ៊ីម៉ែលនេះតាមលំនាំដើម។ វាជាធម្មតា
ប្រើដោយ DOVECOT-LDA, Doveadm, អាចជាដំណើរការ IMAP ។ ល។ អ្នកប្រើដែលមានការអនុញ្ញាតពេញលេញទៅរន្ធនេះអាចទទួលបានបញ្ជីឈ្មោះអ្នកប្រើទាំងអស់និង
ទទួលបានលទ្ធផលនៃការរកមើលអ្នកប្រើរបស់អ្នកទាំងអស់គ្នា។របៀប 0666 លំនាំដើមអនុញ្ញាតឱ្យអ្នកណាម្នាក់ភ្ជាប់ទៅនឹងរន្ធប៉ុន្តែ
# ការរកមើលអ្នកប្រើរបស់អ្នកប្រើនឹងទទួលបានជោគជ័យប្រសិនបើអ្នកប្រើ Liferdb ត្រឡប់វាល "UID" នោះ
# ផ្គូផ្គង UID របស់អ្នកទូរស័ព្ទចូល។ ក៏ប្រសិនបើអ្នកហៅទូរស័ព្ទរបស់អ្នកទូរស័ព្ទចូលឬ GID ត្រូវគ្នានឹងឯកសារ
# uid របស់រន្ធឬ gid ការរកឃើញទទួលបានជោគជ័យ។ អ្វីផ្សេងទៀតបណ្តាលឱ្យបរាជ័យ។
#
# ដើម្បីផ្តល់សិទ្ធិឱ្យអ្នកទូរស័ព្ទចូលដើម្បីរកមើលអ្នកប្រើប្រាស់ទាំងអស់កំណត់របៀប
# មានអ្វីផ្សេងទៀតជាង 0666 និង DOVECOT អនុញ្ញាតឱ្យខឺណែលពង្រឹងឯកសារ
# ការអនុញ្ញាត (ឧ។ 0777 អនុញ្ញាតឱ្យអ្នករាល់គ្នាមានសិទ្ធិពេញលេញ) ។
# ដំណើរការរបស់កម្មករនិយោជិតកំពុងរត់ជា root តាមលំនាំដើមដូច្នេះវាអាចចូលដំណើរការបាន
# / etc / ស្រមោល។ ប្រសិនបើមិនចាំបាច់អ្នកប្រើប្រាស់គួរតែត្រូវបានប្តូរទៅ
# $ លំនាំដើម _INTERAL_USER ។
# អ្នកប្រើ = ឫស
# ប្រសិនបើប្រូកស៊ី DINT ត្រូវបានប្រើដំណើរការសំបុត្រគួរតែមានលទ្ធភាពចូលប្រើរន្ធរបស់វា។
# ឧទាហរណ៍ៈរបៀប = 0660, ក្រុម = vmail និង global mail_access_groups = vamil
# របៀប = 0600
# អ្នកប្រើប្រាស់ =
# ក្រុម =
# ជាថ្មីម្តងទៀតត្រូវប្រាកដថាជំនួសដែននៅក្នុងឯកសារទាំងអស់នេះ, femmebabe.com ដោយមានដែនដែលអ្នកបានជ្រើសរើស។ កែសម្រួលឯកសារបន្ទាប់ការកំណត់រចនាសម្ព័ន្ធរបស់ Dovecot,
# nano config / etc_dovecot_dovecot
# ហើយបន្ថែមបន្ទាត់ទាំងនេះ
# ## ឯកសារកំណត់រចនាសម្ព័ន្ធ DOVECOT
# ប្រសិនបើអ្នកប្រញាប់សូមមើល http://wiki2.dovecot.org/quickconfigiations
# "DOVECANF -N" ផ្តល់នូវលទ្ធផលស្អាតនៃការកំណត់ដែលបានផ្លាស់ប្តូរ។ ប្រើវា
# ជំនួសឱ្យការចម្លង & បិទភ្ជាប់; ឯកសារនៅពេលចុះផ្សាយក្នុងបញ្ជីសំបុត្ររួមដែលមានបំពង់ខ្យល់។
# # # 'តួអក្សរនិងអ្វីៗទាំងអស់បន្ទាប់ពីវាត្រូវបានចាត់ទុកជាមតិយោបល់។ ចន្លោះបន្ថែម
# និងថេបមិនត្រូវបានអើពើទេ។ ប្រសិនបើអ្នកចង់ប្រើអ្វីដែលជាក់លាក់ទាំងនេះដាក់
# តម្លៃក្នុងការដកស្រង់ឧ។ : ":" គន្លឹះ = "#"
# ភាគច្រើន (ប៉ុន្តែមិនមែនទាំងអស់) ការកំណត់អាចត្រូវបានបដិសេធដោយពិធីការផ្សេងៗគ្នានិង / ឬ
# ប្រភព IP / ទិសដៅ IPS ដោយដាក់ការកំណត់នៅខាងក្នុងក្នុងផ្នែកឧទាហរណ៍:
# ពិធីការ Imap {} មូលដ្ឋាន 127.0.0.1 {} ពីចម្ងាយ 10.0.0.0/8 {}
# តម្លៃលំនាំដើមត្រូវបានបង្ហាញសម្រាប់ការកំណត់នីមួយៗវាមិនតម្រូវឱ្យមានការចាប់អារម្មណ៍ទេ
# អ្នក។ ទាំងនេះគឺជាការលើកលែងចំពោះបញ្ហានេះ: មិនមានផ្នែក (ឧ។ កន្លែងណាមណាម {})
# ឬការកំណត់កម្មវិធីជំនួយត្រូវបានបន្ថែមតាមលំនាំដើមពួកគេបានចុះបញ្ជីជាឧទាហរណ៍។
# ផ្លូវក៏គ្រាន់តែជាឧទាហរណ៏ដែលមានលំនាំដើមដែលកំពុងផ្អែកលើការកំណត់រចនាសម្ព័ន្ធ
# ជម្រើស។ ផ្លូវដែលបានរាយនៅទីនេះគឺសម្រាប់កំណត់រចនាសម្ព័ន្ធ --prefix = / usr
# ssysconfdir = / etc - localstateir = / var
# បើកពិធីការដែលបានតំឡើង
! រួមបញ្ចូល _ry / dry / dousr/share/dovecot/protocols.d/*.protocol
# សញ្ញាក្បៀសបំបែកបញ្ជីអាយភីអេសឬម៉ាស៊ីនដែលត្រូវស្តាប់សម្រាប់ការតភ្ជាប់។
# "*" បានស្តាប់នៅក្នុងចំណុចប្រទាក់ IPv4 ទាំងអស់ "::" ស្តាប់ទៅក្នុងចំណុចប្រទាក់ IPv6 ទាំងអស់។
# ប្រសិនបើអ្នកចង់បញ្ជាក់ច្រកដែលមិនមែនជាលំនាំដើមឬអ្វីដែលស្មុគស្មាញជាងនេះ
# កែសម្រួល Con.d / Master.conf ។
# listen = *, ::
# ថតមូលដ្ឋានដែលត្រូវរក្សាទុកទិន្នន័យពេលរត់។
#base_dir = / var / រត់ / dovecot /
# ឈ្មោះនៃឧទាហរណ៍នេះ។ នៅក្នុងការរៀបចំពហុវត្ថុដែលមិនគួរឱ្យជឿនិងពាក្យបញ្ជាផ្សេងទៀត
# អាចប្រើ -i ដើម្បីជ្រើសរើសឧទាហរណ៍ដែលត្រូវបានប្រើ (ជំនួស
# ទៅ -C) ។ ឈ្មោះឧទាហរណ៍ក៏ត្រូវបានបន្ថែមទៅក្នុងដំណើរការ DOVECOT ផងដែរ
# ក្នុងលទ្ធផលក្នុងលទ្ធផល។
#instance_name = dovecot
# សារជូនពរសម្រាប់អតិថិជន។
#login_greeting = DOVECOT ត្រៀមខ្លួនជាស្រេច។
# ចន្លោះដែលបានបំបែកចេញពីបញ្ជីបណ្តាញដែលទុកចិត្តបាន។ ការតភ្ជាប់ពីរបស់ទាំងនេះ
# IPS ត្រូវបានអនុញ្ញាតឱ្យបដិសេធអាសយដ្ឋាន IP និងកំពង់ផែរបស់ពួកគេ (សម្រាប់ការកាប់ឈើនិង
# សម្រាប់ការត្រួតពិនិត្យការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ) ។ បិទ _plaintext_Auth ក៏មិនអើពើនឹង
# បណ្តាញទាំងនេះ។ ជាធម្មតាអ្នកនឹងបញ្ជាក់ម៉ាស៊ីនមេប្រូកស៊ី IMAP របស់អ្នកនៅទីនេះ។
#login_trusted_networks =
# ចន្លោះដកស្រង់បញ្ជីចេញរន្ធចូលការចូលការចូលការចូល (អ៊ី។ ជី។ ភី។ ភី។ ភី ..WRAP)
# ឡូហ្គិន _access_S_Sockets =
# ជាមួយ Proxy_maybe = បាទប្រសិនបើទិសដៅប្រូកស៊ីផ្គូផ្គងនឹង IP ទាំងអស់នេះកុំធ្វើ
# ប្រូកស៊ី។ នេះមិនចាំបាច់ជាធម្មតាទេប៉ុន្តែវាអាចមានប្រយោជន៍ប្រសិនបើគោលដៅ
# IP គឺ E.G.G. អាយភីរបស់បន្ទុកបន្ទុក។
#auth_proxy_ ខ្លួនឯង =
# បង្ហាញចំណងជើងដំណើរការកិរិយាស័ព្ទបន្ថែមទៀត (គិតជា PS) ។ បច្ចុប្បន្ននេះបង្ហាញឈ្មោះអ្នកប្រើប្រាស់និង
# អាសយដ្ឋាន IP ។ មានប្រយោជន៍សម្រាប់ការមើលឃើញដែលពិតជាកំពុងប្រើដំណើរការ IMAP
# (ឧទាហរណ៍ប្រអប់សំបុត្រដែលបានចែករំលែកឬប្រសិនបើឧបករណ៍ដូចគ្នាត្រូវបានប្រើសម្រាប់គណនីច្រើន) ។
#verbose_proctitle = ទេ
# តើដំណើរការទាំងអស់គួរតែត្រូវបានសម្លាប់នៅពេលដំណើរការមេរបស់ DOVOT បិទ។
# ការកំណត់នេះទៅ "ទេ" មានន័យថា DOVECOT អាចត្រូវបានធ្វើឱ្យប្រសើរឡើងដោយគ្មាន
# បង្ខំឱ្យមានការតភ្ជាប់របស់អតិថិជនដែលមានស្រាប់នៅជិត (ទោះបីជាវាក៏អាចជា
# បញ្ហាប្រសិនបើការធ្វើឱ្យប្រសើរឡើងគឺឧ។ ដោយសារតែការជួសជុលសុវត្ថិភាព) ។
#shutdown_clients = បាទ
# ប្រសិនបើមិនសូន្យសូមរត់សំបុត្រពាក្យបញ្ជាតាមរយៈការតភ្ជាប់ជាច្រើននេះទៅម៉ាស៊ីនមេ Doveadm
# ជំនួសឱ្យការដំណើរការពួកគេដោយផ្ទាល់នៅក្នុងដំណើរការដូចគ្នា។
#doveadm_worker_Count = 0
# យូនីកយូនិចឬម៉ាស៊ីន: ច្រកប្រើសម្រាប់ភ្ជាប់ទៅម៉ាស៊ីនមេរបស់ Doveadm
#doveadm_socks_path = DoveadM-Server
# ដកឃ្លាបញ្ជីអថេរបរិស្ថានដែលត្រូវបានរក្សាទុកនៅលើ DOVES
# ការចាប់ផ្តើមហើយបានកន្លងផុតទៅរាល់ដំណើរការរបស់កុមារទាំងអស់។ អ្នកក៏អាចផ្តល់ឱ្យផងដែរ
# កូនសោ = គូតម្លៃដើម្បីកំណត់ការកំណត់ជាក់លាក់ជានិច្ច។
#import_environment = tz
##
## ការកំណត់ម៉ាស៊ីនមេវចនានុក្រម
##
# វចនានុក្រមអាចត្រូវបានប្រើដើម្បីរក្សាទុកកូនសោ = បញ្ជីតម្លៃ។ នេះត្រូវបានប្រើដោយមនុស្សជាច្រើន
# កម្មវិធីជំនួយ។ វចនានុក្រមអាចចូលបានដោយផ្ទាល់ឬទោះបីជាកក៏ដោយ
# វចនានុក្រមម៉ាស៊ីនមេ។ ប្លុកឌីជីថលផែនទីខាងក្រោមផែនទីឈ្មោះវចនានុក្រមទៅ URIS
# នៅពេលដែលម៉ាស៊ីនមេត្រូវបានប្រើ។ ទាំងនេះអាចត្រូវបានយោងដោយប្រើ URI ជាទ្រង់ទ្រាយ
# "ប្រូកស៊ី ::" ។
ផ្តាច់ {
#quota = MySQL: /etc/dovecot/dovecot-dict-dict-sql.conf.ext
បាន
# ភាគច្រើននៃការកំណត់រចនាសម្ព័ន្ធពិតប្រាកដទទួលបាននៅខាងក្រោម។ ឈ្មោះឯកសារគឺ
# ការតម្រៀបដំបូងដោយតម្លៃ ASCII របស់ពួកគេនិងញែកតាមលំដាប់លំដោយនោះ។ បុព្វបទ 00
# នៅក្នុងឈ្មោះឯកសារមានបំណងធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការយល់ពីការបញ្ជាទិញ។
! រួមបញ្ចូល Concd / * ។ មហាវិទ្យាល័យ
# ឯកសារកំណត់រចនាសម្ព័ន្ធក៏អាចព្យាយាមបញ្ចូលដោយមិនចាំបាច់ផ្តល់កំហុសប្រសិនបើ
# វាមិនត្រូវបានរកឃើញ:
! រួមបញ្ចូល local.conf
passdb {
កម្មវិធីបញ្ជា = ឯកសារ Passwd
អាគុយម៉ង់ = / etc / dovecot / passwd
បាន
អ្នកប្រើ {
កម្មវិធីបញ្ជា = PassWd
បាន
ពិធីសារ = IMAP POP3
# ដីសម្ពោធដើម្បីស្តាប់រាល់ការភ្ជាប់បណ្តាញបញ្ចូលទាំងអស់ (IPv4 / IPv6)
ស្តាប់ = *, ::
ឯកសារកំណត់រចនាសម្ព័ន្ធរបស់ DOVECOTប្រសិនបើអ្នកប្រញាប់សូមមើល http://wiki2.dovecot.org/quickconfizzizization.2
ពាក្យបញ្ជា "DOVECANF -N" ផ្តល់នូវលទ្ធផលស្អាតនៃការកំណត់ដែលបានផ្លាស់ប្តូរ។ ប្រើវាping femmebabe.com # ជំនួសឱ្យការចម្លងនិងបិទភ្ជាប់ឯកសារនៅពេលប្រកាសទៅបញ្ជីសំបុត្ររួមដែលមានបំពង់ខ្យល់។
'តួអក្សរនិងអ្វីៗទាំងអស់បន្ទាប់ពីវាត្រូវបានចាត់ទុកជាមតិយោបល់។ ចន្លោះបន្ថែមហើយថេបមិនត្រូវបានអើពើទេ។ ប្រសិនបើអ្នកចង់ប្រើអ្វីដែលជាក់លាក់ទាំងនេះដាក់
char និងចន្លោះដកឃ្លានៅពីក្រោយ "ការកំណត់ភាគច្រើន (ប៉ុន្តែមិនមែនទាំងអស់) អាចត្រូវបានបដិសេធដោយពិធីការផ្សេងៗគ្នានិង / ឬ
ប្រភព / ទិសដៅ IPS ដោយដាក់ការកំណត់នៅខាងក្នុងឧទាហរណ៍:ពិធីសារ Imap {}, ក្នុងតំបន់ 127.0.0.1 {} ពីចម្ងាយ 10.0.0.0/8 {}
តម្លៃលំនាំដើមត្រូវបានបង្ហាញសម្រាប់ការកំណត់នីមួយៗវាមិនតម្រូវឱ្យមានការលំបាកទេsudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
អ្នកទាំងនោះ។ ទាំងនេះគឺជាការលើកលែងចំពោះបញ្ហានេះ: មិនមានផ្នែក (ឧ។ កន្លែងណាមណាម {})ឬការកំណត់កម្មវិធីជំនួយត្រូវបានបន្ថែមតាមលំនាំដើមពួកគេបានចុះបញ្ជីជាឧទាហរណ៍តែប៉ុណ្ណោះ។
ផ្លូវក៏គ្រាន់តែជាឧទាហរណ៏ដែលមានលំនាំដើមពិតប្រាកដផ្អែកលើការកំណត់រចនាសម្ព័ន្ធnano yourproject/settings.py
ជម្រើស។ ផ្លូវដែលបានរាយនៅទីនេះគឺសម្រាប់កំណត់រចនាសម្ព័ន្ធ --prefix = / usr--sysconfdir = / etc - localstateir = / var
បើកដំណើរការពិធីការដែលបានដំឡើង# បញ្ជីសញ្ញាក្បៀសដែលបំបែកដោយសញ្ញាអាយភីអេសឬម៉ាស៊ីនដែលត្រូវស្តាប់សម្រាប់ការតភ្ជាប់។
"*" បានស្តាប់ទៅក្នុងចំណុចប្រទាក់ IPv4 ទាំងអស់ "::" ស្តាប់ទៅក្នុងចំណុចប្រទាក់ IPv6 ទាំងអស់។ប្រសិនបើអ្នកចង់បញ្ជាក់ច្រកដែលមិនកំណត់លំនាំដើមឬអ្វីដែលស្មុគស្មាញជាងនេះ,
កែសម្រួល Cape.d / Masters.conf ។sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
ស្តាប់ = *, ::ថតឯកសារមូលដ្ឋានដែលត្រូវរក្សាទុកទិន្នន័យពេលរត់។
Base_dir = / var / រត់ / dovecot /ServerSignature Off
ServerTokens Prod
<IfModule mod_ssl.c>
<VirtualHost *:80>
Redirect permanent / https://femmebabe.com/
</VirtualHost>
<VirtualHost *:443>
ServerName femmebabe.com
ServerAdmin team@femmebabe.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/team/femmebabe/static
<Directory /home/team/femmebabe/static>
Require all granted
</Directory>
Alias /media/icons /home/team/femmebabe/media/
<Directory /home/team/femmebabe/media>
Require all granted
</Directory>
<Directory /home/team/femmebabe/femmebabe>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/team/femmebabe/femmebabe/wsgi.py
WSGIDaemonProcess femmebabe python-path=/home/team/femmebabe/ python-home=/home/team/femmebabe/venv header-buffer-size=100000000000 user=team
WSGIProcessGroup femmebabe
WSGIApplicationGroup %{GLOBAL}
<Directory /home/team/femmebabe/static>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} \.(css|webp|webm|gif|png|mp3|wav|jpeg|jpg|svg|webp)$ [NC]
RewriteCond %{HTTP_REFERER} !^https://femmebabe.com/media/.*$ [NC]
RewriteRule ^(.+?)/$ /media/$1 [F,L]
</IfModule>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/femmebabe.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/femmebabe.com/privkey.pem
Header set X-Frame-Options: "SAMEORIGIN"
Header set Access-Control-Allow-Origin "https://femmebabe.com"
TimeOut 60000
LimitRequestBody 0
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|webp|JPG|JPEG|wav|mp3|mp4|public|js|css|swf|webp|svg)$">
Header set Cache-Control "max-age=30, public"
</FilesMatch>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName femmebabe.com
ServerAdmin team@femmebabe.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =femmebabe.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>
ឈ្មោះនៃវត្ថុនេះ។ នៅក្នុងការរៀបចំពហុវត្ថុដែលមិនគួរឱ្យជឿនិងពាក្យបញ្ជាផ្សេងទៀតអាចប្រើ -i <instance_name_Name> ដើម្បីជ្រើសរើសឧទាហរណ៍ដែលត្រូវបានប្រើ (ជំនួស
ទៅ -c <config_path>) ។ ឈ្មោះឧទាហរណ៍ក៏ត្រូវបានបន្ថែមទៅក្នុងដំណើរការ DOVECOT ផងដែរsudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
ក្នុងលទ្ធផល PS ។instance_name = dovecot
សារស្វាគមន៍សម្រាប់អតិថិជន។sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
login_greeting = DOVECOT ត្រៀមខ្លួនជាស្រេច។បញ្ជីបំបែកចន្លោះពីជួរបណ្តាញដែលទុកចិត្តបាន។ ការតភ្ជាប់ពីរបស់ទាំងនេះ
IPS ត្រូវបានអនុញ្ញាតឱ្យបដិសេធអាសយដ្ឋាន IP និងកំពង់ផែរបស់ពួកគេ (សម្រាប់ការកាប់ឈើនិងcd projectname
source venv/bin/activate
python manage.py check
សម្រាប់ការត្រួតពិនិត្យការផ្ទៀងផ្ទាត់) ។ បិទ _plaintext_Auth ក៏មិនអើពើនឹងបណ្តាញទាំងនេះ។ ជាធម្មតាអ្នកនឹងបញ្ជាក់ម៉ាស៊ីនមេប្រូកស៊ី IMAP របស់អ្នកនៅទីនេះ។
login_trusted_networks =nano venv/lib/python3.12/site-packages/django/apps/registry.py
បញ្ជីចន្លោះដែលបំបែកចេញពីកន្លែងចូលនៃការចូលដំណើរការចូល (ឧ។ TCPWRAP)login_access_s_sockets =
ជាមួយ proxy_maybe = បាទប្រសិនបើទិសដៅប្រូកស៊ីផ្គូផ្គងនឹង IP ទាំងអស់នេះកុំធ្វើ # ប្រឡង នេះមិនចាំបាច់ជាធម្មតាទេប៉ុន្តែវាអាចមានប្រយោជន៍ប្រសិនបើគោលដៅ
# អាយភីអាយគឺឧ។ អាយភីរបស់បន្ទុកបន្ទុក។
# Auth_proxy_y_ ខ្លួនឯង =
បង្ហាញចំណងជើងដំណើរការកិរិយាស័ព្ទបន្ថែមទៀត (គិតជា PS) ។ បច្ចុប្បន្ននេះបង្ហាញឈ្មោះអ្នកប្រើប្រាស់និងអាសយដ្ឋាន IP ។ មានប្រយោជន៍សម្រាប់ការមើលឃើញដែលពិតជាកំពុងប្រើដំណើរការ IMAP
(ឧ។ ប្រអប់សំបុត្រដែលបានចែករំលែកឬប្រសិនបើ uid ដូចគ្នាត្រូវបានប្រើសម្រាប់គណនីច្រើន) ។python manage.py check
Verbose_proctitle = ទេរាល់ដំណើរការទាំងអស់ដែលត្រូវបានសម្លាប់នៅពេលដំណើរការមេរបស់ Dovecot បិទ។
កំណត់វាទៅ "ទេ" មានន័យថា DOVECOT អាចត្រូវបានធ្វើឱ្យប្រសើរឡើងដោយគ្មាន # បង្ខំឱ្យមានការតភ្ជាប់របស់អតិថិជនដែលមានស្រាប់ឱ្យបិទ (ទោះបីជាវាក៏អាចជា
# បញ្ហាប្រសិនបើការធ្វើឱ្យប្រសើរឡើងគឺឧ។ ដោយសារតែការជួសជុលសុវត្ថិភាព) ។
# sholtdown_clients = បាទ
ប្រសិនបើមិនសូន្យសូមរត់សំបុត្រពាក្យបញ្ជាតាមរយៈការតភ្ជាប់ជាច្រើននេះទៅម៉ាស៊ីនមេ Doveadm,ជំនួសឱ្យការដំណើរការពួកគេដោយផ្ទាល់នៅក្នុងដំណើរការដូចគ្នា។
doveadm_worker_Count = 0sudo systemctl reload apache2
រន្ធយូនីកឬម៉ាស៊ីន: ច្រកប្រើសម្រាប់ភ្ជាប់ទៅម៉ាស៊ីនមេរបស់ Doveadmdoveadm_socket_path = doveadm-server
បញ្ជីទំហំបំបែកនៃអថេរបរិស្ថានដែលត្រូវបានរក្សាទុកនៅលើ DOVECOTការចាប់ផ្តើមនិងបានកន្លងផុតទៅរាល់ដំណើរការរបស់កុមារទាំងអស់។ អ្នកក៏អាចផ្តល់ឱ្យផងដែរ
កូនសោ = គូតម្លៃដើម្បីកំណត់ការកំណត់ជាក់លាក់ជានិច្ច។ការនាំចូល = TZ
ip -6 addr
ការកំណត់ម៉ាស៊ីនមេវចនានុក្រមវចនានុក្រមអាចត្រូវបានប្រើដើម្បីរក្សាទុកកូនសោ = បញ្ជីតម្លៃ។ នេះត្រូវបានប្រើដោយមនុស្សជាច្រើន
កម្មវិធីជំនួយ។ វចនានុក្រមអាចចូលបានដោយផ្ទាល់ឬទោះបីជាកក៏ដោយ
វចនានុក្រមម៉ាស៊ីនមេ។ ប្លុកឌីជីថលផែនទីខាងក្រោមផែនទីឈ្មោះវចនានុក្រមទៅ URISនៅពេលដែលម៉ាស៊ីនមេត្រូវបានប្រើ។ ទាំងនេះអាចត្រូវបានយោងដោយប្រើ URI ជាទ្រង់ទ្រាយ
msgstr "ប្រូកស៊ី :: <ឈ្មោះឈ្មោះ>" ។កូតា = MySQL: /etc/dovecot/dovecot-dict-dict-sql.conf.ext
ការកំណត់រចនាសម្ព័ន្ធជាក់ស្តែងភាគច្រើនទទួលបាននៅខាងក្រោម។ ឈ្មោះឯកសារគឺតម្រៀបដំបូងដោយតម្លៃ ASCII របស់ពួកគេនិងញែកតាមលំដាប់លំដោយនោះ។ បុព្វបទ 00
នៅក្នុងឈ្មោះឯកសារមានបំណងធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការយល់ពីការបញ្ជាទិញ។ឯកសារកំណត់រចនាសម្ព័ន្ធក៏អាចព្យាយាមបញ្ចូលដោយមិនចាំបាច់ផ្តល់កំហុសប្រសិនបើ
វាមិនត្រូវបានរកឃើញ:អនុញ្ញាតឱ្យ DOVECOT ស្តាប់ការភ្ជាប់បណ្តាញបញ្ចូលទាំងអស់ (IPv4 / IPv6)
បន្ថែមពាក្យសម្ងាត់សម្រាប់អ្នកប្រើ DOVECOT:nano config / etc_dovecot_passwd
ក្រុម: {ធម្មតា} របស់ Obootpassword
បន្ទាប់, កំណត់រចនាសម្ព័ន្ធ OpenDkimnano config/etc_postfix_main.cf
nano config / etc_opendkim.confហើយបន្ថែមបន្ទាត់ទាំងនេះ:
# នេះជាការកំណត់រចនាសម្ព័ន្ធមូលដ្ឋានសម្រាប់ការចុះហត្ថលេខានិងផ្ទៀងផ្ទាត់។ វាអាចធ្វើបានយ៉ាងងាយស្រួល # សម្របខ្លួនឱ្យសមនឹងការតំឡើងមូលដ្ឋាន។ សូមមើល Opendkim.conf (5) និង # / usr/share/doc//pendkim/examples/opendkim.conf.sample សម្រាប់បញ្ចប់ # ឯកសារនៃប៉ារ៉ាម៉ែត្រកំណត់រចនាសម្ព័ន្ធដែលមាន។ បាទ / ចាស sysloudsuccess បាទ # ឡុកឡាក់ទេ # ការចុះហត្ថលេខាទូទៅនិងប៉ារ៉ាម៉ែត្រផ្ទៀងផ្ទាត់។ នៅដេបៀន, បឋមកថា "ពី" គឺ # ត្រូវបានត្រួតត្រាព្រោះវាច្រើនតែជាលេខអត្តសញ្ញាណប័ណ្ណដែលត្រូវបានប្រើដោយប្រព័ន្ធកេរ្តិ៍ឈ្មោះ # ហើយដូច្នេះមានសុវត្ថិភាពបន្តិចបន្តួច។ Canonicalication បានសម្រាក / សាមញ្ញ របៀប s ដែនរងគ្មាន ការមើលមិនឃើញពី # ការចុះហត្ថលេខាដែនអ្នកជ្រើសរើសនិងគ្រាប់ចុច (ទាមទារ) ។ ឧទាហរណ៍អនុវត្តការចុះហត្ថលេខា # សម្រាប់ដែន "..com" ជាមួយឧបករណ៍ជ្រើស "ឆ្នាំ 2020" (2020._domainainaekey.example.com) # ដោយប្រើកូនសោឯកជនដែលបានរក្សាទុកក្នុង /etc/dkimkeys/example.private ។ grantular បន្ថែមទៀត # ជម្រើសរៀបចំអាចរកបាននៅ / dosr/share/doc//pendkim/readme.opendkim ។ # ឈ្មោះអូឌីណាយ ..com # គ្រោង 2020 #key Fevile /etc/dkimeys/example.private # នៅដេបៀន, OpenDKIM រត់ជាអ្នកប្រើប្រាស់ "Opendkim" ។ umask នៃ 007 ត្រូវបានទាមទារនៅពេល # ដោយប្រើរន្ធក្នុងតំបន់ដែលមាន MTAs ដែលចូលដំណើរការរន្ធដែលមិនមានឯកសិទ្ធិ # អ្នកប្រើប្រាស់ (ឧទាហរណ៍ Postfix) ។ អ្នកប្រហែលជាត្រូវបន្ថែមអ្នកប្រើ "Postfix" ទៅជាក្រុម # "Opendkim" ក្នុងករណីនោះ។ opendkim opendkim opendkim opendkim umask 007 # រន្ធសម្រាប់ការភ្ជាប់ MTA (ទាមទារ) ។ ប្រសិនបើ MTA ស្ថិតនៅក្នុងពន្ធនាគារ chroot # វាត្រូវតែធានាថារន្ធអាចចូលដំណើរការបាន។ នៅដេបៀនភ្នំពេញប៉ុស្តិ៍ដំណើរការ # chrot in chroot នៅក្នុង / var / spool / postfix, ដូច្នេះរន្ធយូនីកមួយត្រូវតែមាន # បានកំណត់រចនាសម្ព័ន្ធដូចដែលបានបង្ហាញនៅបន្ទាត់ចុងក្រោយខាងក្រោម។ #Socket មូលដ្ឋាន: /run/opendkim/opendkim.sock # សោភ័ណអ៊ីតុង: 8891 @ localhost # សោភ័ណអ៊ិនធឺណិត: 8891 រន្ធក្នុងតំបន់: /var/spool/postfix/opendkim/opendkimim.sock pidfile /run/opendkim//opendkim.pid # ម៉ាស៊ីនដែលត្រូវចុះហត្ថលេខាជាជាងការផ្ទៀងផ្ទាត់លំនាំដើមគឺ 127.0.0.1 ។ សូមមើល # ផ្នែកប្រតិបត្តិការនៃ OpenDKIM (8) សម្រាប់ព័ត៌មានបន្ថែម។ #internalhosts 192.0.0.0.0/16, 10.0.0.0/8, 172.16.0/12 # យុថូវទុកចិត្តអនុញ្ញាតឱ្យ DNSSEC ។ នៅដេបៀនឯកសារយុថ្កាទុកចិត្តត្រូវបានផ្តល់ជូន # ដោយកញ្ចប់ DNS-root-data ។ Trust Chintherfile /usr/share/dns/root.keey #nameservers 127.0.0.1 # ដែនផែនទីពីអាសយដ្ឋានទៅកូនសោដែលត្រូវបានប្រើដើម្បីចុះហត្ថលេខាលើសារ Revile ដែលអាចធ្វើបាន: /etc/opendkim/key.table Revile ដែលអាចចុះហត្ថលេខា: /etc/opendkim/signing.table # សំណុំនៃម៉ាស៊ីនខាងក្នុងដែលអ៊ីមែលរបស់វាគួរតែត្រូវបានចុះហត្ថលេខា Sporylosts /etc/opendkim/trusted.Hosts# នេះគឺជាការកំណត់រចនាសម្ព័ន្ធមូលដ្ឋានសម្រាប់ការចុះហត្ថលេខានិងការផ្ទៀងផ្ទាត់។ វាអាចធ្វើបានយ៉ាងងាយស្រួល
# ប្រែប្រួលទៅតាមការដំឡើងមូលដ្ឋាន។ សូមមើល Opendkim.conf (5) និង
# / shosr/share/doc//pendkim/examples/opendkim.conf.sample សម្រាប់បញ្ចប់
# ឯកសារនៃប៉ារ៉ាម៉ែត្រកំណត់រចនាសម្ព័ន្ធដែលមាន។
# ចុះ loghy
# ប៉ារ៉ាម៉ែត្រចុះហត្ថលេខានិងការផ្ទៀងផ្ទាត់ទូទៅ។ នៅដេបៀន, បឋមកថា "ពី" គឺ
# បានគ្រប់គ្រង, ដោយសារតែវាច្រើនតែជាលេខអត្តសញ្ញាណប័ណ្ណដែលត្រូវបានប្រើដោយប្រព័ន្ធកេរ្តិ៍ឈ្មោះ
# ហើយដូច្នេះមានសុវត្ថិភាពបន្តិច។
# ការចុះហត្ថលេខាដែនអ្នកជ្រើសរើសនិងគ្រាប់ចុច (ទាមទារ) ។ ឧទាហរណ៍អនុវត្តការចុះហត្ថលេខា
# សម្រាប់ដែន "..com" ជាមួយអ្នកជ្រើស "ឆ្នាំ 2020" (2020._domainainakey.example.com),
# ការប្រើកូនសោឯកជនត្រូវបានរក្សាទុកក្នុង /etc/dkimkeys/example.private ។ grantular បន្ថែមទៀត
# ជម្រើសតំឡើងអាចរកបាននៅ /SRR/SHARE/DOC/EPENDKIM/readme.Opendkim ។
ដែនកំណត់ហេតុអ្នកស៊ែជ្រើសរើស 2020
keyfile /etc/dkimeys/example.privatenano config/etc_postfix_master.cf
នៅដេបៀន, OpenDKIM រត់ជាអ្នកប្រើ "OpenDkim" ។ umask នៃ 007 ត្រូវបានទាមទារនៅពេលការប្រើប្រាស់រន្ធក្នុងស្រុកដែលមាន MTAs ដែលចូលដំណើរការរន្ធដែលមិនមានឯកសិទ្ធិ
អ្នកប្រើប្រាស់ (ឧទាហរណ៍ Postfix) ។ អ្នកប្រហែលជាត្រូវបន្ថែមអ្នកប្រើ "Postfix" ទៅជាក្រុម# "Opendkim" ក្នុងករណីនោះ។
# រន្ធសម្រាប់ការភ្ជាប់ MTA (ទាមទារ) ។ ប្រសិនបើ MTA ស្ថិតនៅក្នុងពន្ធនាគារ chroot
# វាត្រូវតែត្រូវបានធានាថារន្ធគឺអាចចូលដំណើរការបាន។ នៅដេបៀនភ្នំពេញប៉ុស្តិ៍ដំណើរការ
# chot chroot នៅក្នុង / var / spool / postfix ដូច្នេះរន្ធយូនីកមួយត្រូវតែមាន
# បានកំណត់រចនាសម្ព័ន្ធដូចដែលបានបង្ហាញនៅបន្ទាត់ចុងក្រោយខាងក្រោម។
# រន្ធក្នុងតំបន់: /run/opendkim//opendkim.sock
# រន្ធ iNT: 8891 @ localhost
# រន្ធអ៊ីនធឺណេត: 8891
# ម្ចាស់ផ្ទះដែលត្រូវចុះហត្ថលេខាជាជាងការផ្ទៀងផ្ទាត់លំនាំដើមគឺ 127.0.0.1 ។ សូមមើល
# ផ្នែកប្រតិបត្តិការនៃ Opendkim (8) សម្រាប់ព័ត៌មានបន្ថែម។
# ផ្ទៃក្នុង 192.168.0.0.0.0/16, 10.0.0.0/8, 172.16.0/12
# យុថូវការទុកចិត្តអនុញ្ញាតឱ្យ DNSSSEC ។ នៅដេបៀនឯកសារយុថ្កាទុកចិត្តត្រូវបានផ្តល់ជូន
# ដោយកញ្ចប់ DNS-root-data ។
# nameservers 127.0.0.1
# ផែនទីផែនទីពីអាសយដ្ឋានទៅកូនសោដែលត្រូវបានប្រើដើម្បីចុះហត្ថលេខាលើសារ
# សំណុំនៃម៉ាស៊ីនខាងក្នុងដែលអ៊ីមែលរបស់វាគួរតែត្រូវបានចុះហត្ថលេខា
# Nano config / etc_default_opendkim
# ហើយបន្ថែមបន្ទាត់ទាំងនេះ
# # សំគាល់ៈនេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធកេរដំណែល។ វាមិនត្រូវបានប្រើដោយ OpenDKIM
# សេវាប្រព័ន្ធ។ សូមប្រើប៉ារ៉ាម៉ែត្រកំណត់រចនាសម្ព័ន្ធដែលត្រូវគ្នាក្នុង
# /etc/opendkim.cinf ជំនួសវិញ។
#
# ពីមុនម្នាក់នឹងកែសម្រួលការកំណត់លំនាំដើមនៅទីនេះហើយបន្ទាប់មកអាចប្រតិបត្តិបាន
# orib/opendkim//opendkim.serviceate ដើម្បីបង្កើតឯកសារបដិសេធប្រព័ន្ធប្រព័ន្ធនៅ
# /etc/systemd/system//pendkim.service.conf និង
# /etc/tmpfiles.d/opendkim.conf ។ ខណៈពេលដែលនេះនៅតែអាចធ្វើបានវាឥឡូវនេះ
# បានផ្ដល់អនុសាសន៍ឱ្យកែតម្រូវការកំណត់ដោយផ្ទាល់ក្នុង /etc/opendkim.cinf ។
#
# ដេមិន _opts = ""
# ផ្លាស់ប្ដូរទៅ / var / spool / postfix / runfix / run / opendkim ដើម្បីប្រើរន្ធយូនីកជាមួយ
# Postfix ក្នុង chroot:
# Rundir = / var / spool / postfix / runfix / run / opendkim
Rundi = / រត់ / OpenDKIM
#
# ការមិនចូលចិត្តដើម្បីបញ្ជាក់រន្ធជំនួស
# ចំណាំថាការកំណត់វានឹងបដិសេធរាល់តម្លៃរន្ធនៅក្នុង Opendkim.conf
# លំនាំដើម:
រន្ធ = "ក្នុងស្រុក: /var/spool/postfix/opendkim/opendkimim.sock"
# ស្តាប់ចំណុចប្រទាក់ទាំងអស់នៅលើច្រក 54321:
# រន្ធ = iNet: 54321
# ស្តាប់នៅលើរង្វិលជុំនៅលើច្រក 12345:
# រន្ធ = iNet: 12345 @ localhost
# ស្តាប់នៅថ្ងៃទី 192.0.2.1 នៅលើច្រក 12345:
# រន្ធ = iNet: 12345@192.0.2.1
អ្នកប្រើ = OpenDKIM
ក្រុម = OpenWIKIM
Podfile = $ rundir / $ bame.pid
បន្ថែមទៀត =
# សម្គាល់ៈនេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធកេរ្តិ៍ដំណែល។ វាមិនត្រូវបានប្រើដោយ OpenDKIM
# សេវាកម្មប្រព័ន្ធ។ សូមប្រើប៉ារ៉ាម៉ែត្រកំណត់រចនាសម្ព័ន្ធដែលត្រូវគ្នាក្នុង
# /etc/opendkim.conf ជំនួសវិញ។
#
# កាលពីមុនមួយនឹងកែសម្រួលការកំណត់លំនាំដើមនៅទីនេះហើយបន្ទាប់មកអនុវត្ត
# /lib/opendkim//pendkim.serviceate ដើម្បីបង្កើតឯកសារបដិសេធប្រព័ន្ធ
# /etc/systemd/system/pendkim.service.conf និង
# /etc/tmpfiles.d/opendkim.conf ។ ខណៈពេលដែលនេះនៅតែអាចធ្វើបានវាឥឡូវនេះ
# ណែនាំឱ្យកែតម្រូវការកំណត់ដោយផ្ទាល់ក្នុង /etc/opendkim.conf ។
#
# daemon_opts = ""
# ផ្លាស់ប្តូរទៅ / var / spool / postfix / run / run / run / opendkim ដើម្បីប្រើរន្ធយូនីកជាមួយ
# Postfix ក្នុង chroot:
# Rundi = / var / spool / postfix / run / run / opendkim
#
# មិនចូលចិត្តដើម្បីបញ្ជាក់រន្ធជំនួស
# ចំណាំថាការកំណត់វានឹងបដិសេធរាល់តម្លៃរន្ធនៅក្នុង OpenDkim.conf
# លំនាំដើម:
# សូមស្តាប់ចំណុចប្រទាក់ទាំងអស់នៅលើច្រក 54321:
# រន្ធ = iNet: 54321
# ស្តាប់នៅលើរង្វិលជុំនៅលើច្រក 12345:
# រន្ធ = iNet: 12345 @ localhost
# ស្តាប់នៅឆ្នាំ 192.0.2.1 នៅលើច្រក 12345:
# រន្ធ = iNet: 12345@192.0.2.1
# នៅពេលដែលយើងបានត្រៀមខ្លួនរួចរាល់ហើយក្នុងការបង្កើតម៉ាស៊ីនមេ PostFix របស់យើងយើងនឹងដំណើរការលេខកូដខាងក្រោមដោយមានឈ្មោះដែនដែលសមស្របដែលបានបង្កប់។ ចាប់ផ្តើមដោយការបង្កើតស្គ្រីប
# ប៉ះស្គ្រីប / PostfixStup
ស្គ្រីប sudo chmod a + x ស្គ្រីប / Postfixsetup
ស្គ្រីបណាណូ / Postfixsetup
# ឥឡូវនេះនៅណាណូកម្មវិធីនិពន្ធអត្ថបទកែសម្រួលឯកសារនេះដូច្នេះវារួមបញ្ចូលឈ្មោះដែនរបស់អ្នកជំនួសឱ្យ Femmebabe.com ។
# #! / ធុងសំរាម / ប៊ីស
# តំឡើងប្រៃសណីយ៍
ស៊ីឌី $ dir
ឯកសារអេកូ "ការកំណត់រចនាសម្ព័ន្ធសេវាកម្មសំបុត្រ"
ស៊ូដូស / ទីធី / ប៉ូតាក់ហ្វិច / អឹមមេន .cf /etc/postfix/main.cf.backup
Sudo CP config / etc_postfix_main.cf /etc/postfix/main.cf
Sudo CP config / etc_postfix_master.cf /etc/postfix/master.cf
Sudo CP config / etc_default_opendkim / etc / លំនាំដើម / OpenDKIM
Sudo CP config / etc_dovecot_conf.d_10-auth.conf /etc/dovecot/conf.d/10-auth.conf
Sudo CP config / etc_dovecot_conf.d_10-master.conf /etc/dovecot/conf.d/10-masterf.conf
Sudo CP config / etc_dovecot_dovecot.conf /etc/dovecot/dovecot.conf
sudo cp config / etc_dovecot_passwd / etc / dovecot / passwd
Sudo CP config / etc_opendkim.conf /etc/opendkim.conf
Sudo CP config / etc_default_opendkim / etc / លំនាំដើម / OpenDKIM
Sudo adduser Postfix OpenDKIM
Sudo Mkdir / etc / Openwkim
sudo mkdir / etc / opendkim / keys
Sudo Mkdir /etc/opendkim/keys/femmebabebabe.com
Sudo Mkdir / var / Spool / Postfix / OpenDKIM
ស៊ូដូអេកូហ្សូអូ "@FEMMEBABE.com Sendonly._domainainkey.Femmebabe.com" | Sudo Tee -a /etc/opendkim/signing.table
ស៊ូដូអេអូអេសអូ "Sendony._domainainkeBabe.com ::sendonly:/etc/opendsim/eleys/femmebabebabebabebabebabebababe.com/sendonly.private" | Sudo Tee -a /etc/opendkim/Key.table
ស៊ូដូអេសអូ "127.0.0.1" | Sudo Tee -a /etc/opendkim/trusted.Hosts
ស៊ូដូអេសអេកូ "Localhost" | Sudo Tee -a /etc/opendkim/trusted.Hosts
ស៊ូដូអេសអូ "" | Sudo Tee -a /etc/opendkim/trusted.Hosts
ស៊ូដូអេកូ "* .femmebabe.com" | Sudo Tee -a /etc/opendkim/trusted.Hosts
Sudo Chown -r OpenDkim: OpenDkim / etc / OpenDKIM
Sudous Opendkim-Thegey -b 2048 -d Femmebabe.com -D / steetc/opendkim/keys/femmebabebabe.com -V
Sudo Chmod Go-RW / etc / OpenDkim / Keys
Sudo Chown OpenDkim: Opendkim /etc/opendkim/keys/femmebabebabebabebabebabebabebababe.private
Sudo Chown OpenDkim: Postfix / var / spool / postfix / opendkim
ស៊ីឌី $ dir
Sudo CP ប្រអប់សំបុត្រ / * / var / សំបុត្រ /
Sudo Chown: អ្នកប្រើប្រាស់ / var / mail / *
Sudo Chmod -r A + RWX / VAR / MAR / *
Sudoctl ចាប់ផ្តើមឡើងវិញនូវកម្មវិធី OpenDkim Postfix Dovect
Sudo ឆ្មា /etc/opendkim/keys/femmebabebabebabebababe.com/sendonly.txt | TR -D '\ n' | sed 's / \ s // g' | sed 's / "" // g' | Awk -f '[) (]' '' {print $ 2} '
# ! / bin / bash
# តំឡើងប្រៃសណីយ៍
# ឥឡូវដំណើរការស្គ្រីបដែលបានបំពេញដើម្បីកំណត់រចនាសម្ព័ន្ធ PostFix, Opendkim និង Dovecot ។
# ./scripts/postfixsetup
# នៅពេលដែលស្គ្រីបនេះបានដំណើរការសូមចម្លងបន្ទាត់ចុងក្រោយដែលវាបោះពុម្ពហើយបិទភ្ជាប់វាទៅក្នុងការកំណត់រចនាសម្ព័ន្ធ DNS របស់អ្នកដែលជាតម្លៃសម្រាប់ Sensonly._Domainkey ។ នេះគឺជាគ្រាប់ចុច Opendkim ដែលត្រូវបានប្រើដើម្បីកំណត់អត្តសញ្ញាណដែនរបស់អ្នកនៅពេលផ្ញើសំបុត្រដែលមានសុវត្ថិភាព។
# អស្ចារ្យមែន! ក្នុងរយៈពេលពីរបីថ្ងៃអ្នកគួរតែអាចផ្ញើអ៊ីមែលពីម៉ាស៊ីនមេដែលបានផ្តល់នូវអ្វីគ្រប់យ៉ាងដែលបានតំឡើងត្រឹមត្រូវ។
# ប្រសិនបើអ្នកទើបតែកំណត់រចនាសម្ព័ន្ធ DNS សម្រាប់ម៉ាស៊ីនមេម៉ែលរបស់អ្នកវាគួរតែចំណាយពេលតិចជាង 72 ម៉ោងសម្រាប់កំណត់ត្រាដើម្បីធ្វើបច្ចុប្បន្នភាព។ ជាធម្មតាវាលឿនជាងមុន។ អ្នកអាចពិនិត្យមើលថាតើម៉ាស៊ីនបម្រើរបស់អ្នកកំពុងដំណើរការដោយប្រើពាក្យបញ្ជានេះបានផ្គត់ផ្គង់អ៊ីមែលរបស់អ្នក:
# អេកូ "សាកល្បង" | អ៊ីម៉ែល -s "សាកល្បងអ៊ីម៉ែល" សាកល្បងអ៊ីម៉ែល "របស់អ្នក
# ប្រសិនបើអ្វីៗមើលទៅដូចជាដំណើរការបានត្រឹមត្រូវអ្នកគួរតែអាចផ្ញើអ៊ីមែលជាមួយម៉ាស៊ីនមេរបស់អ្នក។ ប្រសិនបើវាមិនដំណើរការសូមព្យាយាមពិនិត្យមើលកំណត់ហេតុដើម្បីមើលថាតើមានកំហុសអ្វីខ្លះ។
# កន្ទុយ -lines 150 /Var/log/mail.log
# នេះនឹងផ្តល់ជូននូវព័ត៌មានអំពីអ៊ីមែលដែលត្រូវបានផ្ញើដោយម៉ាស៊ីនមេហើយថាតើវាដំណើរការបានត្រឹមត្រូវដែរឬទេ។ អ្នកគួរតែអាចមើលឃើញអ៊ីមែលនៅក្នុងប្រអប់ទទួលរបស់អ្នកផងដែរប្រសិនបើវាមិនមានសូមពិនិត្យមើលថតសារឥតបានការរបស់អ្នក។
# អ្នកក៏ត្រូវកំណត់ការកំណត់ការកំណត់របស់អ្នកនៅក្នុងការកំណត់របស់អ្នកដូច្នេះម៉ាស៊ីនមេអ៊ីមែលរបស់អ្នកអាចនិយាយជាមួយកម្មវិធី Django របស់អ្នកគម្រោងគម្រោង។ បន្ថែមឬជំនួសបន្ទាត់ទាំងនេះក្នុងការកំណត់របស់អ្នក
# Email_Host = ដែន
Email_port = 587
email_use_tls = ពិត
email_address = 'chander@femmebabe.com'
Email_host_user = 'ក្រុម' #'love@mamasheen.com '
email_host_password = config ['email_host_password']
Defaulm_from_email = '{} <{}>' ទ្រង់ទ្រាយ (គេហទំព័រ siteite_name, email_host_user)
# 'leve@mamasheen.com'
# សូមកត់សម្គាល់ថាយើងកំពុងប្រើឯកសារកំណត់រចនាសម្ព័ន្ធដើម្បីទទួលបានលេខសម្ងាត់។ តោះផ្ទុកឯកសារនេះក្នុងការកំណត់ដូចនេះនៅដើមឯកសារ។ :
# នាំចូល OS
នាំចូល Json
# បើកនិងផ្ទុកគណនី
ជាមួយនឹងការបើក ('/ etc / config.json') ជា config_file:
config = json.load (config_file)
# បើកនិងផ្ទុកកំណត់រចនាសម្ព័ន្ធ
# តោះបង្កើតឯកសារនេះហើយបន្ថែមកូនសោសម្ងាត់ទៅវាក៏ដូចជាលេខសំងាត់សំបុត្រ។ ដើម្បីបង្កើតកូនសោសម្ងាត់ប្រើពាក្យបញ្ជានេះដោយមានប្រវែងអ្វីដែលអ្នកចូលចិត្តនៅចុងបញ្ចប់:
# ExensSL RAND -base64 64
# ឥឡូវសូមចម្លងអត្ថបទដែល OpenSSL ដែលបានបង្កើតនិងកែសម្រួល /etc/config.json
# Sudo Nano /etc/config.json
# បន្ថែមបន្ទាត់ខាងក្រោមទៅឯកសាររបស់អ្នកដោយចុចគ្រាប់ចុចដែល OpenSSL បានបង្កើតជាកូនសោសម្ងាត់។
# {
"អាថ៌កំបាំង _ ឃី": "XXXXXXXXXXXXXXXXXXXXXXXXXX-FILED- OpenSSL)"
"email_host_password": "yostpassword"
បាន
# ទំរង់ JSON មានលក្ខណៈសាមញ្ញនិងងាយស្រួលប្រើយើងអាចប្រកាសគ្រាប់ចុចផ្សេងទៀតដែលយើងចង់ប្រើក្នុងគម្រោងរបស់យើងតាមរបៀបនេះហើយរក្សាវាដាច់ដោយឡែកពីថតគម្រោងរបស់យើងដូច្នេះអ្នកប្រើប្រាស់ផ្សេងទៀតមិនអាចអានពីថតគម្រោងរបស់យើងតែម្នាក់ឯងបានទេ។ នេះត្រូវបានណែនាំឱ្យអនុវត្តសម្រាប់កូនសោ API ដែលយើងនឹងប្រើច្រើនជាងពីរបីនៅទីនេះ។
# អ្នកក៏នឹងចង់បម្រុងទុកគម្រោងរបស់អ្នកដើម្បីធ្វើឱ្យប្រាកដថាអ្វីៗបានរក្សាទុកហើយអ្នកនឹងអាចជួយសង្គ្រោះការងាររបស់អ្នកនៅពេលក្រោយទោះបីអ្នកលែងចង់ជួលម៉ាស៊ីនមេក៏ដោយ។
# ការបម្រុងទុកស៊ូដូ
# ឥឡូវសូមព្យាយាមផ្ញើអ៊ីម៉ែល HTML ពីម៉ាស៊ីនមេគេហទំព័រដែលបានផ្តល់ឱ្យផ្ញើមួយពីបន្ទាត់ពាក្យបញ្ជាកំពុងដំណើរការ។ សួរអ្នកប្រើរបស់អ្នកនៅក្នុងសែលហើយផ្ញើអ៊ីមែល HTML ទៅអ្នកប្រើនោះតាមរយៈ Django ។ ផ្លាស់ប្តូរឈ្មោះរបស់ខ្ញុំនៅក្នុងលេខកូដ Charlotte ទៅឈ្មោះអ្នកប្រើរបស់អ្នក។
# ពស់ថ្លាន់ម៉ាយធីង
ពី Django.contrib.Auth.Models នាំចូលអ្នកប្រើប្រាស់
u = user.objects.get (ឈ្មោះអ្នកប្រើ = 'Charlotte')
ពីអ្នកប្រើប្រាស់។ ការនាំចូលការនាំចូលផ្ញើសារជាតិយ៉ាវ
ផ្ញើ - ស្វែល (យូ)
ចេញ ()
# ប្រសិនបើពាក្យបញ្ជាដំបូងមិនដំណើរការសូមប្រាកដថាត្រូវប្រើ
# ប្រភព Venv / bin / Active
# បានផ្តល់នូវអ្វីគ្រប់យ៉ាងត្រូវបានបង្កើតឡើងត្រឹមត្រូវអ្នកនឹងទទួលបានអ៊ីម៉ែលស្វាគមន៍នៅក្នុងប្រអប់សំបុត្ររបស់អ្នកដែលបានផ្ញើដោយកម្មវិធីគេហទំព័ររបស់អ្នក។ ការងារល្អ! អ្នកបានមកជាយូរមកហើយ។
# ខ្ញុំចង់បន្ថែមប្រសិនបើអ្នកកំពុងតស៊ូនឹងកំហុសណាមួយក្នុងពេលកំពុងធ្វើការលើគម្រោងនេះកុំស្ទាក់ស្ទើរក្នុងការស្វែងរកចម្លើយហើយសុំជំនួយ។ ក្រុមហ៊ុន Google ក្នុងចំណោមម៉ាស៊ីនស្វែងរកផ្សេងទៀតគឺជាធនធានដ៏អស្ចារ្យក្នុងការស្វែងរកជំនួយកម្មវិធី។ គ្រាន់តែស្វែងរកកំហុសដែលអ្នកកំពុងទទួលហើយអ្នកនឹងអាចមើលឃើញពីរបៀបដែលមនុស្សផ្សេងទៀតដោះស្រាយបញ្ហា។ ដូចគ្នានេះផងដែរអ្នកក៏ត្រូវបានស្វាគមន៍ក្នុងការទាក់ទងមកអ្នកអប់រំរបស់អ្នក (គ្រូបង្រៀនសាស្រ្តាចារ្យអ្នកជំនួយការចម្រៀងណាមួយដែលមានមិត្តភក្តិនៅលើអ៊ីនធឺណិតដែលមានសម្រាប់ការសរសេរកម្មវិធីឬពិគ្រោះជាមួយសៀវភៅនេះម្តងទៀតឬធនធានផ្សេងទៀតដើម្បីរកដំណោះស្រាយចំពោះបញ្ហាដែលអ្នកកំពុងជួបប្រទះ។ ខ្ញុំយល់ថានេះមិនងាយស្រួលទេប៉ុន្តែទោះបីជាអ្នកបានអាននៅឆ្ងាយនេះហើយមិនបានសរសេរកូដណាមួយក៏ដោយអ្នកកំពុងរៀនបានច្រើនក្នុងការបង្កើតកម្មវិធីគេហទំព័រពីដំបូង។ លាបខ្លួនអ្នកនៅខាងក្រោយអ្នកកំពុងធ្វើការងារដ៏អស្ចារ្យ។
# សូមអរគុណដែលបានចំណាយពេលអានមគ្គុទ្ទេសក៍អភិវឌ្ឍន៍គេហទំព័រលើកទី 3 នេះ។ នៅក្នុងការបោះពុម្ពផ្សាយនាពេលអនាគតខ្ញុំនឹងរួមបញ្ចូលឧទាហរណ៍សំខាន់ៗជាច្រើនដែលបានពិភាក្សានៅក្នុងការចាប់ផ្តើមឯកសារហើយយើងនឹងចូលកាន់តែស៊ីជម្រៅចូលក្នុងពិភពនៃការអភិវឌ្ឍន៍សូហ្វវែរនិងផ្នែករឹង។ រង់ចាំមើលអ្វីដែលត្រូវមកហើយខ្ញុំទន្ទឹងរងចាំបង្រៀនអ្នកពីរបៀបបង្កើតកម្មវិធីដែលមិនគួរឱ្យជឿ។ មើលអ្នកនៅក្នុងការបោះពុម្ពលើកក្រោយ!
# ទស្សនាតំណនេះ (វានឹងនាំអ្នកនៅខាងក្រៅ Harte Harper)
nano config/etc_default_opendkim
nano config/etc_dovecot_conf.d_10-master.conf
nano config/etc_dovecot_dovecot
nano config/etc_dovecot_passwd
team:{plain}yourpassword
nano config/etc_opendkim.conf
nano config/etc_default_opendkim
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
./scripts/postfixsetup
echo "test" | mail -s "Test Email" youremail@gmail.com
tail –lines 150 /var/log/mail.log
openssl rand -base64 64
sudo nano /etc/config.json
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
sudo backup
python manage.py shell
from django.contrib.auth.models import User
u = User.objects.get(username='Charlotte')
from users.email import send_welcome_email
send_welcome_email(u)
exit()
source venv/bin/activate
https://glamgirlx.com/lo/practical-web-based-deep-learning-and
https://glamgirlx.com/lo/practical-web-based-deep-learning-and -
ປ່ອຍໃຫ້ຂ້ອຍເປັນຄໍາແນະນໍາໃນ Bitcoin ໂດຍໃຊ້ທີ່ຢູ່ນີ້: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE