دسته‌ها
وبلاگ

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

 

در این مقاله به شرح پیاده سازی فرم ورود و ثبت نام دریک ویو در MVC خواهیم پرداخت

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

نکته مهم این است که هر فرم مستقل از دیگری رفتار کند ومثلا اگر یکی از فرم‌ها ناقص پر شد و دکمه‌ی ارسال آن فشرده شد، پس از Post-back،فقط و فقط اجرای همین فرم Validate شود و فرم دوم بدون تغییر باقی بماند

در ابتدا باو ویو مدل های فرم های خود را بسازیم روی پوشه Model کلیک راست کرده و یک کلاس به نام MyLoginViewModel بسازید داخل این کلاس فیلد هایی که برای ورود کارب نیاز است همراه با صفت ها برای اعتبار سنجی وارد میکنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyLoginViewModel
{
    [Display(Name = "آدرس ایمیل")]
    [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
    [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
    [EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نیست")]
    public string Email { get; set; }
    [Display(Name = "کلمه عبور")]
    [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
    [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Display(Name = " به یاد داشته باش")]
    public bool RememberMe { get; set; }
}

سپس نوبت به ساخت مدل برای فرم ثبت نام میرسد همانند بالا یک کلاس به نام RegisterViewModel    بسازید و فیلد لازم برای ثبت نام و صفت های آنهارا وارد کنید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class RegisterViewModel
 {
     [Display(Name = "کلمه عبور")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
     [DataType(DataType.Password)]
     public string UserPassword { get; set; }
     [Display(Name = "تکرار کلمه عبور")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
     [DataType(DataType.Password)]
     [Compare("UserPassword", ErrorMessage = "کلمه عبور وارد شده یکسان نیستند")]
     public string RepeatPassword { get; set; }
     [Display(Name = "آدرس پست الکترونیکی")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 کاراکتر باشد")]
     [EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نیست")]
     public string UserEmail { get; set; }
     [Display(Name = "نام")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 باشد")]
     [Required]
     public string FirstName { get; set; }
     [Display(Name = "نام خانوادگی")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 باشد")]
     [Required]
     public string LastName { get; set; }
 }

پس از ساخت ویو مدل ها نوبت به ساخت پارشیال ویو از روی این مدل ها می باشد دقت کنید که ویو ها باید به صورت پارشیال ساخته شوند:

1
2
3
4
5
6
7
8
public ActionResult Login()
{
    return PartialView();
}
 public ActionResult Register()
{
    return PartialView();
}

حالا در کنترلر خود یک اکشن متد به نام index بنویسید و ویو آنرا بسازید:

1
2
3
4
public ActionResult Index()
{
    return View();
}

و در ویو خود html زیر را بنویسید:

1
2
3
4
5
6
7
8
9
10
11
12
<section>
    <div class="container">
        <div class="row">
            <div class="col-sm-6 col-md-6">
                @Html.Action("Login","Account")
            </div>
            <div class="col-sm-6 col-md-6">
                @Html.Action("Register", "Account")
            </div>
        </div>
    </div>
</section>

همانطور که مشاهده میکنید دو پارشیال ویو فراخوانی شده اند که هرکدام متعلق به یک فرم هستند

پارشیال ویو مربوط به فرم ورود:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@model LoginAndRegister.Models.MyLoginViewModel
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>MyLoginViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.RememberMe, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.RememberMe)
                    @Html.ValidationMessageFor(model => model.RememberMe, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

و پارشیال ویو مربوط به فرم ثبت نام :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@model LoginAndRegister.Models.RegisterViewModel
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>RegisterViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.UserPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserPassword, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.RepeatPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.RepeatPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.RepeatPassword, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.UserEmail, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserEmail, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserEmail, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

نکته مهم:

هیچ نوع ورودی برای Html.BeginForm     در نظرنگیرید اگر اکشن متدی را برای صدا زدن در این بخش به کار ببرید هنگام Postback     به مشکل برخورد خواهید کرد؛ چون آدرس آن اکشن متد به شکل صریح در آدرس مرورگر فراخوانی میشود و پارشال ما پس از Post-back     به تنهایی و بدون Layout نمایش داده خواهد شد. اسم بردن از اکشن متد وقتی کارساز است که آن اکشن متد قرار باشد یک Redirect     انجام دهد .

نکته دیگر، که مهم ترین نکته در این مثال می باشد این است که اگر  اکشن متد مربوط به Post-back     مشخص نشود، بطور اتوماتیک تمامی اکشن متدهایی که ویژگی    [HttpPost]     دارند اجرا خواهند شد. این یعنی هر دو اکشن متد   Login و Register     اجرا می‌شوند و بنابر آنچه در اکشن متدها نوشته‌ایم هر دوModelState

بررسی میشوند باید برای جدا سازی این مورد  خاصیت name     مربوط به دکمه‌ها را به شکل یک ورودی برای اکشن متدها بفرستیم و بر اساس وضعیت آن تنها state     مدل مورد نظر خودمان را بررسی کنیم پس در ویوها تغییر زیر را انجام دهید:

برای پارشیال ویو login:

1
<button type="submit" class="btn btn-primary" value="ورود" name="submitValue">ورود</button>

و برای پارشیال ویو ثبت نام:

1
<button type="submit" class="btn btn-success" value="ساخت حساب کاربری" name="submitValue">ساخت حساب کاربری</button>

در این روش سعی کنید از ViewModel   استفاده کنید و سعی کنید ویو مدل‌ها پراپرتی‌های با نام یکسان نداشته باشند.

نوبت به حالت پست می رسد همانطور که گفته شد باید خاصیت name مربوط به دکمه ها را به شکل پارامتر ورودی بگیریم پس حالت پست کنترلرها را به شکل زیر مینویسیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Login(MyLoginViewModel login, string submitValue)
      {
          if (submitValue == "ورود")
          {
              if (ModelState.IsValid)
              {
                  //Do Something                  
              }
          }   else
              {
                       ModelState.Clear();
              }      
           return PartialView("Login", login);
      }
      [HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Register(RegisterViewModel register, string submitValue)
      {
          if (submitValue == "ساخت حساب کاربری")
          {
              if (ModelState.IsValid)
              {
              //Do Something
              }
          }
          else
          {
              ModelState.Clear();
          }
          return PartialView("Register", register);
      }

این روش نوعی مدیریت میان اکشن متدهای دارای ویژگی HttpPost     است و همانطور که گفتیم به علت اینکه پس از Post-Back     نیاز به ساختار به هم نخورده‌ی صفحه‌ی قبلی داریم، نمیتوانستیم به شکل صریح، اکشن متد برای Html.BeginForm     تعریف کنیم تا این دردسر‌ها را نداشته باشیم.

دسته‌ها
وبلاگ

سورس کد دریافت پیام تاییدیه به صورت خودکار در اندروید

سورس کد دریافت پیام تاییدیه به صورت خودکار در اندروید

آموزش دریافت خودکار sms در اندروید

آموزش دریافت خودکار sms در اندروید ، تا به حال در اپلیکیشن های مختلفی شاهد زمانی بودید که باید در اپ ثبت نام کنید و این عمل ثبت نام قطعا با روشی از احراز هویت همراه ست.

در ادامه یکی از محبوب ترین روش ها که کار را برای کاربر بسیار راحت میکند را با هم مرور میکنیم.

برای دریافت سور کد هم میتوانید به کانال تلگرام ما مراجعه فرمایید

سورس کد دریافت پیام تاییدیه به صورت خودکار در اندروید

آموزش دریافت خودکار sms در اندروید ، این روش ممکن است ارسال ایمیل , ارسال sms و یا تماس با شما باشد که در اکثر مواقع یک کد برای شما ارسال میشود

که باید آنرا به اپ بدهید تا بتواند هویت شما را تایید کند.

ارسال کد به شماره موبایل راحت ترین و بی دردسر ترین روش احراز هویت است

که البته میتوان این روش را بسیار ساده تر برای کاربر ارائه داد

بدین صورت که  دیگر نیاز نباشد پس از دریافت پیام به صندوق دریافتی پیام های خود رفته و کد را کپی کرده و به اپ بدهد

بلکه خود اپ پس از دریافت پیام , ارسال کننده پیام را چک کند و درصورت مطابقت , متن پیام را بردارد و وارد کند

در این روش کاربر عملا لازم نیست کاری بجز وارد کردن شماره موبایل درست را انجام دهد.

اما این روش مستلزم دسترسی اپلیکیشن به پیام ها یا sms های کاربر است که در نسخه های پیشین اندروید ۶ این مجوز ها تنها در manifest قرار میگرفت

اما در نسخه های بعدی اندروید ۶ این مجوز ها به صورت runtime از کاربر گرفته میشود چون جزو dangerous permission هستند.

در ادامه ما سورس کد ارسال یک پیام فیک و دریافت متن پیام به صورت خودکار توسط اپ را آموزش خواهیم داد.

و برای دریافت سورس کد هم میتوانید به کانال تلگرام ما مراجعه فرمایید

ابتدا یک پروژه ساده ایجاد کنید.

ما در این پروژه نیاز به هیچگونه UI نداریم چون تنها هدف خواندن خودکار متن پیام دریافتی است.

ما نیز تنها یک TextView در فایل xml  خود قرار دادیم

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tejariapp.messagereceive.MainActivity">
<TextView
android:id="@+id/code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/monaco"
android:text="Code"
android:textColor="?attr/colorAccent"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
در این پروژه ما تنها سه بخش داریم
  • کلاسی که درقالب broadcast receiver زمانی که smsی دریافت شد اجرا میشود
  • اینترفیسی که رابطی بین broadcast receiver و اکتیویتی اصلی ماست و پیغام را از برودکست به اکتیویتی منتقل میکند.
  • و یک اکتیویتی اصلی که تمامی رخداد ها ازسمت برودکست را به ما نمایش دهد.

اینترفیس را به صورت زیر با عنوان Sms Listener  ایجادمیکنیم

01
02
03
04
05
06
07
08
09
10
11
package com.tejariapp.messagereceive;
/**
 *
 * Created by MDN on 09/12/2017.
 *
 */
public interface SmsListener {
    void onMessageReceived(String messageText);
}

سپس کلاس SmsReceiver را به صورت زیر ایجاد میکنیم

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.tejariapp.messagereceive;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
/**
* Created by Marjan on 09/12/2017.
* Own WebSite is Tejariapp.com
*/
public class SmsReceiver extends BroadcastReceiver {
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");
for(int i=0;i<pdus.length;i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = smsMessage.getDisplayOriginatingAddress();
//You must check here if the sender is
// your provider and not another one with same text.
String messageBody = smsMessage.getMessageBody();
//Pass on the text to our listener.
mListener.onMessageReceived(messageBody);
}
}
public static void bindListener(SmsListener listener) {
mListener = listener;
}
}

پارامتر intent دریافتی در واقع شامل شی PDU یا  (Protocol Data Unit)

که یک پروتکل برای انتقال پیام های SMS در مخابرات است و  ما آرایه ای از این پیام ها را دریافت می کنیم

که به وسیله سیستم به گیرنده ما ارسال می شود.

حال با استفاده از متد createFromPdu() یک شی SmsMessage ایجاد میکنیم

تا بتوانیم از طریق این شی به ارسال کننده و متن پیام درسترسی پیدا کنیم.

همانطور که در  کامنت هم گفته شده پس از دریافت ارسال کننده پیام با استفاده از متد

smsMessage.getDisplayOriginatingAddress()

میتوان آن را با ارسال کننده مدنظر خودمان مقایسه کرد و درصورتی که مطابقت داشت مقدار پیام را با اینترفیس به اکتیویتی ارسال کرد .

اما در این پروژه ما محدودیتی برای پیام ها درنظر نگرفته ایم و هرپیامی که دریافت شود متن آنرا به اکتیویتی

با استفاده از متد onMessageReceive(messageBody) ارسال خواهیم کرد.

 

**اما نکته مهم این است که این کلاس را به عنوان service به manifest اضافه کنیم

 

1
2
3
4
5
<receiver android:name="com.tejariapp.messagereceive.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

**همچنین مجوز های دسترسی به sms هارا نیز در manifest قرار میدهیم

1
2
3
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />

حال تنها  کافی است پیام را در اکتیویتی اصلی دریافت کنیم و نمایش دهیم

و البته مجوز runtime  هم برای دریافت و ارسال sms ایجاد کرده ایم

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.tejariapp.messagereceive;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_REQUEST_CODE = 1;
    TextView mCodeView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCodeView=findViewById(R.id.code);
        SmsReceiver.bindListener(new SmsListener() {
            @Override
            public void onMessageReceived(String messageText) {
                Log.e("Text",messageText);
                mCodeView.setText(messageText);
            }
        });
        requestPermission();
        sendFakeSms();
    }
    //send fake sms to emulator
    private void sendFakeSms(){
        Random rand = new Random();
        int  n = rand.nextInt(50) + 1;
        SmsManager sms= SmsManager.getDefault();
        sms.sendTextMessage("5554",null,
                String.valueOf(n),null,null);
        Log.e("MESSAGE BODY",String.valueOf(n));
    }
    //runtime permission
    private void requestPermission(){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                    Manifest.permission.SEND_SMS},PERMISSION_REQUEST_CODE);
    }
    private boolean checkPermission(){
        int result = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED){
            return true;
        else {
            return false;
        }
    }
}

حال میتوان برنامه را روی شبیه ساز جرا کرد و خوا هیم دید هنگام اجرا یک sms که حاوی یک عدد تصادفی است به شبیه ساز ارسال

و همچنین مقدار در textView نیز قرار میگیرد.

دسته‌ها
وبلاگ

سورس کد فرم ثبت نام در سایت با Asp.net MVC 

سورس کد فرم ثبت نام در سایت با Asp.net MVC

سورس کد فرم ثبت نام در سایت با Asp.net MVC

سورس کد فرم ثبت نام در سایت با Asp.net MVC ، زبان طراحی وب ASP.NET MVC یکی از زبان های مطرح طراحی سایت در بین برنامه نویسان تحت وب است. به چند دلیل که یکی از مهم ترین آنها امنیت بالای این معماری است. در ادامه آموزش به علاوه سورس کد رجیستر کردن در بانک را به شما آموزش خواهیم داد.

سورس کد ثبت نام در سایت با Asp.net MVC

کدنویسی تحت وب زبان Asp.net به دلایل بسیاری بین برنامه نویسان محبوب شده ازجمله امنیت بالای این زبان!

در این بخش میخواهیم کدنویسی قسمت ثبت نام در سایت را با استفاده از این زبان و معماری MVC انجام دهیم. مشخصا اطلاعات ثبت نام کاربر باید درون بانکی قرار گیرد تا در ادامه پروژه در بخش های دیگر از جمله لاگین , بتوان از این اطلاعات استفاده کرد حال این بانک میتواند هرکدام از انواع بانک های معروف ازجمله SQL Server , Access و.. باشد که ما از پایگاه داده SQL Server استفاه میکنیم.

پس ابتدا در SQL Server یک دیتابیس با نام TestDatabase و درونش یک جدول با نام Tbl_Users ایجاد میکنیم و فیلد های زیر را برایش در نظر میگیریم(برای دریافت آموزشات کامل SQL Server به پست مربوطه مراجعه کنید)

asp-data-base

حال برنامه  Visual Studio را باز کرده  و پروژه ای جدید از نوع Asp.net ایجاد میکنیم

asp-mvc

سپس نوع پروِژه را انتخاب میکنیم که از نوع Empty و با خاصیت MVC

asp-mvc

بانک خود را با کلیک راست کردن برروی فولدر Model و انتخاب گزینه Add و سپس ADO.NET Entity Data Model به برنامه اضافه میکنیم

asp-mvc

سپس نام Model خود را انتخاب کرده و مرحله به مرحله پیش میرویم در مرحله اول نوع مدل را انتخاب میکنیم

asp-mvc

در مرحله بعد کانکشن خود را با بانک برقرار میکنیم

asp-mvc

در مرحله بعد نیز گزینه Entity Framwork 6.x را انتخاب کرده و در مرحله اخر نیز جدول یا جداول مورد نظر را انتخاب میکنیم

asp-mvc

حال خواهید دید جدول یا جداول انتخاب شده در پنجره مدل به شما نمایش داده میشود.

سپس با اعمال کردن ویژگی MetadataType به کلاس جدول اضافه شده به صورت زیر

1
[MetadataType(typeof(UserMetadata))]

یک کلاس با فیلدهای مدل ایجاد کرده و ویژگی های مورد نیازمثل Key , DisplayName و.. را به آن اضافه خواهیم کرد.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//This Attribute is for Define Primary Key
        [Key]
        public int ID { getset; }
        //this Attribute is for Define Lable for property
        [Display(Name ="نام")]
        //by this Attribute you should fill the field
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Name { getset; }
        [Display(Name ="نام خانوادگی")]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Family { getset; }
        [Display(Name ="رمز عبور")]
        //by this Attribute you define type of entry property value
        [DataType(DataType.Password)]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        //define minimume lenght of property value
        [MinLength(5,ErrorMessage ="رمز عبور نمیتواند کمتر از ۵ کاراکتر باشد")]
        public string Password { getset; }
        [Display(Name ="ایمیل")]
        //check email type for property value
        [EmailAddress]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Email { getset; }
        [Display(Name ="موبایل")]
        //check for mobile number property value
        [RegularExpression("09[0-9]{9}",ErrorMessage ="شماره موبایل معتبر نیست")]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Mobile { getset; }

حال زمان ایجاد یک کنترلر است. درون کنترلر ActionResult مربوط به Register را قرار میدهیم. متد Register  اول برا ارسال مقادیر مدل به متد دوم برای ذخیره سازی دربانک میباشد و متد دوم زمانی اجرا میشود که دکمه ثبت زده شود.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
TestDatabaseEntities db = new TestDatabaseEntities();
        public ActionResult Register()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Register(Tbl_Users o, HttpPostedFileBase Image)
        {
            if (!ModelState.IsValid)
                return View();
            //check Email Adress in database
            if (!db.Tbl_Users.Any(x => x.Email.ToLower().Trim() == o.Email))
            {
                //set user enter value to table field
                Tbl_Users user = new Tbl_Users()
                {
                    Name = o.Name.Trim(),
                    Family = o.Family.Trim(),
                    Email = o.Email.ToLower().Trim(),
                    Password = o.Password,
                    Mobile = o.Mobile
                };
                //add object to database
                db.Tbl_Users.Add(user);
                ViewBag.Add = true;
                //save changes in database
                db.SaveChanges();
            }
            else
            {
                //set the error text for Email object
                ModelState.AddModelError("Email""ایمیل وارد شده موجود است");
                return View();
            }
            return View();
        }

دستورات درون این متد بدین شرح است :

ابتدا مدل خود را چک میکنیم که خطایی نداشته و معتبر باشد با دستور ModelState.IsValid سپس ایمیل وارد شده را چک میکنیم که قبلا در بانک ثبت شده یا خیر که درصورت نبود ایمیل در بانک اقدام به ذخیره سازی اطلاعات کاربر میکنیم.

سپس ViewBag تعریف میکنیم تا در View برنامه بتوانیم از آن برای اطلاعات  رسانی به کاربر استفاده کنیم و در انتها نیز رکورد را Add و Save میکنیم

حال view ثبت نام را ایجاد میکنیم براساس کلاس ایجاد شده و Model تعبیه شده در برنامه

asp-mvc

خواهید دید اطلاعات ویو به صورت خودکار ایجاد میشوند به این دلیل که در مرحله ایجاد Template ویو را از نوع Create قرار دادیم پس تنها کافی است از ViewBag که ایجاد کردیم جهت اطلاع رسانی به کاربر در ویو استفاده کنیم

01
02
03
04
05
06
07
08
09
10
11
@{
    if (ViewBag.Add == true)
    {
        <div class="alert alert-success">ثبت نام با موفقیت انجام شد</div>
    }
}

حال برنامه را با Ctrl+F5 اجرا میکنیم و پس از وارد کردن اطلاعات و کلیک کردن دکمه Create نتیجه را به صورت زیر خواهید دید

asp-mvc

دسته‌ها
وبلاگ

ارسال ایمیل (یاهو و جیمیل) با سی شارپ

ارسال ایمیل (یاهو و جیمیل) با سی شارپ

سلام .
چند باری ازم سوال شد که نحوه ارسال ایمیل در ASP.net و سی شارپ به چه صورتیه .من هم چندتا رفرنس دادم منتها دیدم بچه ها موفق نبودن و نتونستن با موفقیت کدی بنویسن یا پیدا کنن که براحتی ایمیلی رو ارسال کنه.
این شد که تصمیم گرفتم کد مربوط به ارسال ایمیل رو هم در سی شارپ و هم درASP.netبنویسم .
خب کد مربوطه برای ارسال ایمیل بصورت زیر هست :

خب حالا ببینیم اینها به چه معناست .
ما بطور کلی برای ارسال ایمیل به دوتا کلاس بیشتر نیاز نداریم کلاسMailMessage وSmtpClient
شما پیام و عنوان و سایر ویژگی های مربوط به پیامتون رو در قالب یکMailMessage پیاده میکنید و بعد از طریقSmtpClient اون رو ارسال میکنید .

نکته مهم : کلاس MailMessage رو در دوتا namespace وجود داره . شما حتما ازSystem.Net.Mail; استفاده کنید . چون نیم اسپیس Web.Mail اصطلاحاDeprecated یا از دور خارج شده است.

 

پس حتما دقت کنیدSystem.Net.Mail; رو using کرده باشید .

مشکلی که بیشتر افراد دارن بحث سرور ایمیل هست . که بعنوان یک بخش اصلی حتما باید در کد قید بشه.
اکثر ما چون در روی سیستممون سرور ایمیل نداریم با بیشتر کدهایی که بعنوان مثال در اینترنت اومده برای ارسال ایمیل در سی شارپ وASP.net به مشکل بر میخوریم .
برای حل این مشکل هم ما دو راه داریم

سرور ایمیلی رو روی سیستممون نصب کنیم و براحتی موقعی که از ما اطلاعات این سرور رو میخواد اون اطلاعات رو بهش میدیم و تمام . (معمولا اسم سرورlocalhost و پورت 25 ( پورت پیشفرض SMTP) قرار میدیم-مگه اینکه موقع نصب اسم سرور و شماره متفاوتی رو تنظیم کرده باشیم)

از یه سرور رایگان مثل سرور ارسال ایمیل گوگل یا یاهو استفاده کنیم .

خب ما برای ارسال ایمیل از بخش دوم استفاده میکنیم که نیازی به نصب چیزی نداره .
برای بدست اوردن سرور گوگل یا یاهو ( فرقی نمیکنه) یه سرچ ساده همه اطلاعاتی رو که میخوایم رو بما میده . مثلا:

اطلاعات سرور ایمیل گوگل:

نام سرور ایمیل : smtp.gmail.com
پورت : 456, 587
ssl : فعال

——————————————————————————————————-

اطلاعات سرور یاهو :
نام سرور ایمیل : smtp.mail.yahoo.com
پورت : 456, 587
ssl : فعال

خب براحتی مقادیر مورد نظرمون رو مقدار دهی میکنیم که بصورت زیر میشه :

1
2
3
4
SmtpClient smtpClient = newSmtpClient();
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;

اگه ما سرور ایمیل رو سیستم خودمون فعال بود که راحت میتونستیم بنویسیم : (اگه وب سایت داریم و سایتمون رو آپلود کردیم تو 99 درصد اوقات تنظیم زیر درست هست اگر ارور داد به مدیر سرورتون اطلاع بدید و بگید اطلاعات میل سرور چی هست و اون اطلاعات رو در زیر وارد کنید)

1
SmtpClient smtpClient = newSmtpClient("localhost",25);

 587 استفاده کنید.
نکته بعدی اینه که یاهو ارتباط امن رو پشتیبانی نمیکنه در این حالت پس EnableSsl باید برابر false باشه.

خب حالا ما برای اینکه بتونیم از این ایمیل سرور ها استفاده کنیم لازمه یه ایمیل داشته باشیم . اگه از گوگل بخواییم استفاده کنیم گوگل از ما جی میل میخواد و اگه از یاهو بخواییم استفاده کنیم سرورش از ما اطلاعات یه ایمیل یاهو رو میخوادبرای همین ما از بخش زیر برای ارسال این اطلاعات به سرور ایمیل مورد نظرمون استفاده میکنیم

1
2
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = newSystem.Net.NetworkCredential(txtFromEmail.Text, txtEmailPass.Text);

بعد از انجام این کار هم تنها کاری که میمونه ارسال ایمیله که با دستور زیر انجامش میدیم .

1
smtpClient.Send(message);

برای انتهای کار هم یه توضیح هم در مورد IsBodyHtml بدم که تو بخش MailMessage استفاده اش کردیم .
اگر میخوایید پیامی که ارسال میکنید بصورت HTML باشه – یعنی از تگهای HTML توش استفاده شده باشه این بخش رو TRUE میکنید . امروزه تقریبا همه میل سرورها این قابلیت رو دارن و میتونید براحتی این مقدار رو برابر TRUE قرار بدید و ازش استفاده کنید.

پروژه ای که ضمیمه کردم هم باهاش میتونید از طریق جی میل ایمیل ارسال کنید و هم از طریق یاهو . تغییرات مورد نظر برای کار کردن با این دو ایمیل سرور هم توی کد مشخص شده و براحتی میتونید ازش در پروژهاتون استفاده کنید

دسته‌ها
وبلاگ

چرا جاوا اسکریپت مناسب‌ترین گزینه برای اینترنت اشیا است؟

انعطاف‌پذیری بالای جاوا اسکریپت در خدمت اینترنت اشیا

چرا جاوا اسکریپت مناسب‌ترین گزینه برای اینترنت اشیا است؟

چرا جاوا اسکریپت مناسب‌ترین گزینه برای اینترنت اشیا است؟
در این مقاله به ‌طور مختصر به شما خواهیم گفت چرا جاوا اسکریپت این پتانسیل را دارد تا در اکوسیستم اینترنت اشیا حضور درخشانی داشته باشد.

اینترنت اشیا از مؤلفه‌های مختلف بسیاری پدید آمده است. اشیایی که به‌ صورت یکپارچه با یکدیگر کار می‌کنند تا به کاربران خدمت‌رسانی کنند. نرم‌افزارها، سخت‌افزارها و راه‌ حل‌های میان‌افزاری همگی در تعامل با یکدیگر اکوسیستم اینترنت اشیا را به حرکت درمی‌آورند. اما در این میان نباید از مقوله برنامه‌نویسی اینترنت اشیا غافل شویم. تمامی اشیایی که در اکوسیستم اینترنت اشیا به کار گرفته می‌شوند، به‌شکلی مستقیم یا غیرمستقیم وام‌دار زبان‌های برنامه‌نویسی هستند. در حالی که نگاه اکثر برنامه‌نویسان در زمان ساخت برنامه‌های کاربردی برای گجت‌های اینترنت اشیا به‌سمت زبان‌های بزرگی همچون سی پلاس ‌پلاس یا پایتون دوخته شده است، اما به نظر می‌رسد در این میان جاوا اسکریپت حرف‌های بسیاری برای گفتن دارد. جاوا اسکریپت یکی از برترین زبان‌های اسکریپت‌نویسی است که برای ساخت هر دو گروه برنامه‌های تحت وب و دستگاه‌های موبایلی مورد استفاده قرار می‌گیرد. اما جاوا اسکریپت این پتانسیل را دارد تا به بهترین شکل به اکوسیستم اینترنت اشیا کمک و برنامه‌‌های اینترنت اشیای قدرتمندی را خلق کند.

ورود جاوا اسکریپت به هر بخش از دنیای فناوری موفقیت‌آمیز بوده است

جاوا اسکریپت در طول این سال‌ها ثابت کرده است که در دنیای برنامه‌نویسی وب و در هر دو بخش کلاینت و سرور توانمند است. اما چرا جاوا اسکریپت این پتانسیل را دارد در صنعت اینترنت اشیا به کار گرفته شود؟ جاوا اسکریپت یک زبان برنامه‌نویسی سطح بالای پویا، تفسیر شده و نوع‌گذاری نشده (untyped) است. HTML ،CSS و جاوا اسکریپت سه فناوری مرکزی و زیرساختی وب هستند. اکثر سایت‌ها از آن استفاده می‌کنند و تمام مرورگرها بدون آنکه به افزونه‌ای نیاز داشته باشند، از آن پشتیبانی می‌کنند. جاوا اسکریپت‌ چهارچوب‌های مختلفی همچون آنگولار جی‌اس، آنگولار 2 و ReactJS را دارد. این چهارچوب‌ها به‌منظور ساخت برنامه‌های ترکیبی موبایلی برای سکو‌های مختلفی همچون اندروید، ویندوز و iOS مورد استفاده قرار می‌گیرند. آنگولار جی‌اس یک چهارچوب وب است که طراحان برای ساخت برنامه‌های تک صفحه‌ای از آن استفاده می‌کنند. جاوا اسکریپت با چهارچوب Apache Cordova به‌منظور ساخت برنامه‌های موبایلی چندسکویی مورد استفاده قرار می‌گیرد. برنامه‌هایی که از یک رابط کاربری کاملاً دوستانه استفاده می‌کنند و به ساده‌ترین شکل قابل استفاده هستند. جاوا اسکریپت در ارتباط با توسعه برنامه‌های web Bluetooth نیز به‌شکل گسترده‌ای مورد استفاده قرار می‌گیرد. Node.js یک محیط متن ‌باز جاوا اسکریپت است که به‌منظور طراحی انواع مختلفی از ابزارها و برنامه‌های سمت سرور مورد استفاده قرار می‌گیرد. Node.js به طراحان اجازه می‌دهد با استفاده از جاوا اسکریپت ابزارهای شبکه و وب‌ سرورها را ایجاد کنند. برنامه‌های Node.js روی سکو‌های ویندوز، لینوکس و مک OS قابل اجرا هستند. اما تعاملی بودن جاوا اسکریپت به این زبان اجازه داده است تا از دستگاه‌های فیزیکی و سکو‌های اینترنت اشیا پشتیبانی کند.

مزایای به‌کارگیری جاوا اسکریپت در حوزه اینترنت اشیا چیست؟

کل صنعت اینترنت اشیا حول یک مفهوم ساده در حال حرکت است. ما به‌دنبال آن هستیم تا طیف وسیعی از دستگاه‌های جدید را به اینترنت متصل کنیم، به‌ طوری که این دستگاه‌ها بتوانند با سرورها و دستگاه‌هایی که در سراسر جهان مستقر شده‌اند ارتباط برقرار کنند. در حالی که ما هنوز به‌درستی نمی‌دانیم موج بزرگ بعدی دستگاه‌های اینترنت اشیایی که جهان ما را دستخوش تغییرات اساسی قرار خواهند داد چگونه هستند؟ (تقریباً این ماهیت طبیعی فناوری است که از این موضوع اطلاعی نداشته باشیم.) اما تقریباً از یک موضوع اطمینان خاطر داریم که سنگ ‌بنای فناوری‌های احتمالی آینده وب خواهد بود؛ واسط‌های برنامه‌نویسی تحت وب ستون‌هایی هستند که دستگاه‌های آینده روی آن‌ها قرار خواهند گرفت و به اینترنت متصل خواهند شد. فناوری‌هایی که امیدوار هستیم گره‌ای از مشکلات جوامع باز کنند. اما این تعریف ما را به یک پرسش چالشی‌تر هدایت می‌کند. در حال حاضر کدام‌یک از زبان‌های برنامه‌نویسی می‌توانند به صفحات وب و برنامه‌های کاربردی کمک کنند تا با یکدیگر صحبت کنند؟ جواب این پرسش جاوا اسکریپت است. کاملاً منطقی است به‌دنبال توسعه یک سکوی استاندارد برای اینترنت اشیا باشیم. این سکو باید دو خصیصه مهم داشته باشد. اول آنکه بتواند به طیف بسیار گسترده‌ای از دستگاه‌ها اجازه دهد با یکدیگر ارتباط برقرار کنند و دوم آنکه به همه دستگاه‌ها اجازه دهد با زبان واحدی با یکدیگر صحبت کنند.

جاوا اسکریپت اجازه می‌دهد عملکرد را به اشتراک قرار دهیم؟

توانایی جاوا اسکریپت در هر بخشی عظیم است. زمانی که در نظر دارید شبکه‌ای از دستگاه‌ها را به سرور خود متصل ‌کنید، برای آن‌که با دشواری‌های متعددی روبه‌رو نشوید، سعی می‌کنید آن‌ها را به‌گونه‌ای پیکربندی کنید که همه آن‌ها با زبان واحدی با یکدیگر صحبت کنند. حال تصور کنید طیف بسیار گسترده‌ای از دستگاه‌‌های مختلف متصل به شبکه را در اختیار دارید که همه آن‌ها قادر هستند جاوا اسکریپت را درک کنند. شما نیز سروری را آماده کرده‌اید که Node.Js روی آن اجرا می‌شود. در این حالت برای آنکه پیچیدگی‌ها را به حداقل برسانید و بتوانید توابعی را به اشتراک قرار دهید که عملکردهای مشابهی را روی دستگاه‌های مختلف به اشتراک می‌گذارند، چه گزینه‌ای بهتر از جاوا اسکریپت در اختیارتان قرار دارد؟ با استفاده از جاوا اسکریپت ضمن آنکه به‌کارگیری مجدد توابع کار سهل‌الوصولی خواهد بود، به همان شکل دستگاه‌ها نیز ساده‌تر با یکدیگر در ارتباط خواهند بود. به عبارت دیگر، یک بار طراحی کنید و بارها از آن استفاده کنید.

کل صنعت اینترنت اشیا حول یک مفهوم ساده در حال حرکت است. ما به‌دنبال آن هستیم تا طیف وسیعی از دستگاه‌های جدید را به اینترنت متصل کنیم، به‌ طوری که این دستگاه‌ها بتوانند با سرورها و دستگاه‌هایی که در سراسر جهان مستقر شده‌اند ارتباط برقرار کنند

کتابخانه‌ها، افزونه‌ها و واسط‌های برنامه‌نویسی موجود

جاوا اسکریپت مجموعه‌ای بسیار عظیم از کتابخانه‌ها، افزونه‌ها و واسط‌های برنامه‌نویسی در اختیار دارد. مجموعه‌ای عظیم که بعضی از آن‌ها بدون تغییر و بعضی دیگر با حداقل تغییرات ممکن در اکوسیستم اینترنت اشیا قابل استفاده هستند. در حالی که افزونه‌های جی‌کوئری قدیمی را در اکثر کدهای سمت غیرکلاینت نمی‌توان دو مرتبه استفاده کرد، اما در نقطه مقابل ماژول‌های nmp جاوا اسکریپت در حال تکامل هستند. ماژول‌هایی با قابلیت استفاده مجدد که بسیاری از آن‌ها راه‌ حل‌های خوبی در سمت سرور، کلاینت و فراتر از آن ‌را ارائه می‌کنند. برنامه‌نویسان فعال در حوزه اینترنت اشیا به‌راحتی می‌توانند از کتابخانه‌های کاربردی جاوا اسکریپت همچون Underscore.js، loadash، traverse و Async در طیف گسترده‌ای از دستگاه‌‌های مختلفی که دارای یکسری نقاط مشترک هستند استفاده کنند. یکسری توابع بسیار قدرتمند درون این ماژول‌ها وجود دارد که برای پروژه‌های اینترنت اشیا کاملاً کاربردی هستند. Socket.io مثال خوب دیگری از یک ماژول‌ قدرتمند جاوا اسکریپت است که برای اینترنت اشیا کاملاً ایده‌آل است. ماژولی که می‌تواند یک ارتباط رویدادمحور بی‌درنگ را برای برقراری ارتباط چند دستگاه ایجاد کند. به‌جای آنکه برای انجام یکسری کارهای پایه و زیربنایی به ساخت انواع مختلفی از کتابخانه‌ها و افزونه‌ها نیاز داشته باشیم، می‌توانیم از راه‌ حل‌های موجود استفاده کنیم و آن‌ها را برای تطابق بیشتر با اهداف خود توسعه دهیم. رویکردی که به ما کمک می‌کند درگیر مباحثی همچون بهینه‌سازی کدها از پایه و برطرف کردن اشکالات اولیه نشویم.

جاوا اسکریپت برای ساخت برنامه‌های رویدادمحور کاملاً ایده‌آل است

جاوا اسکریپت در زمینه ساخت برنامه‌های رویدادمحور سابقه خوبی دارد. برنامه‌های رویدادمحور نوع خاصی از برنامه‌ها هستند که به انتظار می‌نشینند تا دستگاهی رویدادی را تولید کند و در ادامه به آن پاسخ دهند. این برنامه‌ها قادر هستند به رویدادهای مختلفی که از سوی دستگاه‌ها اجرا می‌شود به‌خوبی پاسخ دهند. Socket.io در این زمینه عالی عمل می‌کند. Node حلقه‌ای از رویدادها را در اختیار دارد. Node به ما اجازه می‌دهد یکسری از وظایف را به‌گونه‌ای اجرا کنیم که برای کامل شدن آن‌ها در یک صف به انتظار ننشینیم. به عبارت دقیق‌تر با استفاده از Node می‌توانیم وظایف مختلف را به‌ گونه‌ای اجرا کنیم که هریک بدون آنکه در انتظار پایان یافتن وظیفه دیگری باشند اجرا شوند. ما می‌توانیم رویدادها را دریافت کنیم و به آن‌ها پاسخ دهیم. در ادامه از طریق یک روال بازگشتی به انتظار بنشینیم تا یک رویداد به ما اعلام دارد فرآیند اجرای آن تکمیل شده است. این به معنای آن است که ما می‌توانیم به رویدادها به‌محض آنکه اتفاق می‌افتند پاسخ دهیم و هم‌زمان به مدیریت وظایف زیادی بپردازیم که در حال وارد شدن هستند. دستگاه‌های متعدد نیز می‌توانند به رخدادهای مشابه پاسخ دهند. این رویکرد به‌سادگی در اینترنت اشیا کار می‌کند.
برای درک بهتر یک اکوسیستم‌ رویدادمحور مورد استفاده در اینترنت اشیا اجازه دهید سناریویی را مورد بررسی قرار دهیم. بیایید تصور کنیم که شما یک خانه متصل به اینترنت را تحویل گرفته‌اید که یک هاب هوشمند در آن قرار دارد و یکی از وظایف آن پر کردن آب درون یک وان هوشمند زمانی است که در خارج از خانه هستید. شما از طریق گوشی هوشمند‌ خود پیامی را در این خصوص ارسال می‌کنید و در ادامه هر 5 دقیقه یک بار سیگنال‌هایی را از خانه خود دریافت می‌کنید. در این زمان وان خانه شما رویدادی را تولید می‌کند تا به شیرهای آب اجازه دهد به‌ طور خودکار باز شوند و آن ‌را پر کنند. شما متوجه می‌شوید که آخرین بخش‌ سریال مورد علاقه‌تان قرار است پخش شود، یک برنامه کاربردی را روی گوشی هوشمند‌ خود باز می‌کنید و گزینه دانلود و پخش آخرین قسمت سریال را روی آن انتخاب می‌کنید. به گونه‌ای که برنامه کاربردی این درخواست را برای تلویزیون بزرگی که در حمام خانه نصب شده و از طرفی به وان حمام نیز متصل است به نمایش درآورد. وان حمام این رویداد را دریافت و شروع به جست‌وجوی اپیزودهایی می‌کند که برای شما به نمایش درآورد. در این زمان ناگهان متوجه می‌شوید که فراموش کرده‌اید شیر بخرید. مجبور هستید به‌سمت نزدیک‌ترین سوپر مارکت بروید. در این زمان گوشی شما تغییر جهت را تشخیص می‌دهد و پیامی را برای خانه ارسال می‌کند، با این مضمون که شما در نزدیکی خانه قرار ندارید. وان این رویداد را دریافت می‌کند و فرآیند پر شدن با آب را متوقف می‌کند. در این حالت وان به‌جای آنکه صبر کند تا آخرین سریال مورد علاقه شما کامل دانلود شود، به‌سرعت درخواست بستن شیر آب را صادر می‌کند. زمانی که در حال بازگشت به خانه هستید، گوشی شما سیگنال‌ دیگری را ارسال می‌کند. وان متوجه این سیگنال‌ می‌شود و دو مرتبه فرآیند باز کردن شیر آب را به مرحله اجرا درمی‌آورد، در حالی که هنوز هم در حال دانلود اپیزود سریال است. شما به خانه وارد می‌شوید و یک وان داغ آماده را همراه با سریالی که آماده پخش است دریافت می‌کنید. همان ‌گونه که در این سناریو مشاهده کردید، وان آب صبر نکرد تا دانلود یک سریال کامل شود و در ادامه درخواست بستن شیر آب را صادر کند.
همچنین، در زمان پر شدن مخزن زمانی که متوجه شد شما مسیر خود را تغییر داده‌اید باز هم صبر نکرد تا مخزن کامل پر شود و سپس به رخداد شما رسیدگی کند. این همان قابلیت قدرتمند برنامه‌نویسی رویدادمحوری است که جاوا اسکریپت در اختیار اینترنت اشیا قرار می‌دهد.

جاوا اسکریپت مجموعه‌ای بسیار عظیم از کتابخانه‌ها، افزونه‌ها و واسط‌های برنامه‌نویسی در اختیار دارد. مجموعه‌ای عظیم که بعضی از آن‌ها بدون تغییر و بعضی دیگر با حداقل تغییرات ممکن در اکوسیستم اینترنت اشیا قابل استفاده هستند

جاوا اسکریپت اکنون یک زبان بالغ است

هنوز هم تصور غلط رایجی در ارتباط جاوا اسکریپت وجود دارد که اعلام می‌دارد این زبان برای انجام یکسری از کارها بیش از اندازه شلوغ‌کاری می‌کند. من با این دیدگاه مخالف هستم. امروزه با استفاده از روش‌های مدرن طراحان می‌توانند کدهای پایه بسیار تمیزی را بنویسند که نگهداری آن‌ها به سهولت هرچه تمام‌تر امکان‌پذیر باشد. جاوا اسکریپت زبانی است که به بلوغ کامل رسیده است و دیگر نباید محدود به ساخت یکسری برنامه‌های ساده کلاینت باشد. از مدت‌ها پیش ابزارهایی همچون JSHint را در اختیار داشتیم که به ما اطمینان می‌دادند کدهایی که نوشته‌ایم با استانداردهای خاص هماهنگی دارند. همچنین چهارچوب‌های آزمایش جاوا اسکریپت شبیه به Mocha نیز برای گسترش چنین وظایفی در حوزه اینترنت اشیا در اختیار ما قرار گرفته‌اند.

داده‌ها

هر زبان برنامه‌نویسی خصوصیات خاص خود را دارد. در نتیجه کار کردن با زبان‌های مختلف روی دستگاه‌های مختلف مستلزم داشتن اطلاعات کافی درباره آن زبان است. در اغلب موارد شما مجبور هستید داده‌ها را به قالب‌هایی تبدیل کنید که در زبان‌های برنامه‌نویسی مورد استفاده قرار می‌گیرند و بر عکس همین کار را برای ارسال داده‌ها انجام می‌دهید. تعدادی از زبان‌ها در زمینه مدیریت، تبدیل و ارسال داده‌ها بهتر از سایرین عمل می‌کنند. حال تصور کنید همه دستگاه‌های شما بتوانند به یک شکل نوع‌های داده‌ای را درک کنند. در این حالت عملاً به یک فرآیند اضافی تبدیل داده‌ها نیازی نخواهیم داشت، به‌واسطه آنکه همه آن‌ها از یک زبان واحد استفاده می‌کنند.

جاوا اسکریپت باز است

طراحان جاوا اسکریپت برای آنکه بتوانند از آن استفاده کنند، به محیط توسعه یکپارچه خاص یا سیستم‌ عامل واحدی نیاز ندارند. نیازی نیست برای دسترسی به آن یا انتشار برنامه‌های خود حق اشتراک سالانه‌ پرداخت کنید.
هیچ شرکت خاصی نیست که یکسری کدهای مخفی یا حالت‌های پنهان از دید سایر طراحان را درون آن قرار داده باشد. جاوا اسکریپت یک استاندارد کاملاً باز است که می‌تواند از طریق انواع مختلفی از موتورهای جاوا اسکریپتی اجرا شود.
مواردی که به آن‌ها اشاره کردیم همگی دست به دست هم داده‌اند تا جاوا اسکریپت را به یکی از ایده‌آل‌ترین زبان‌های برنامه‌نویسی اکوسیستم اینترنت اشیا تبدیل کنند.

جاوا اسکریپت انتخاب عالی طراحان اینترنت اشیا و تازه‌کاران است

بسیاری از کارشناسان بر این باور هستند که گزینه‌های مختلفی پیش روی طراحان اینترنت اشیا قرار دارد. اما جاوا اسکریپت یکی از معدود گزینه‌هایی است که با کمترین دردسر در دسترس آن‌ها قرار دارد.
جاوا اسکریپت زبانی است که یادگیری آن برای تازه‌کاران ساده است، اما در مقابل مهارت‌هایی آن‌ها را به‌سرعت افزایش می‌دهد. به ‌طوری که در یک بازه زمانی کوتاه طراحان می‌توانند یک سیستم گسترش‌پذیر را به‌معنای واقعی کلمه ایجاد کنند.

جاوا اسکریپت زبانی است که یادگیری آن برای تازه‌کاران ساده است، اما در مقابل مهارت‌هایی آن‌ها را به‌سرعت افزایش می‌دهد. به ‌طوری که در یک بازه زمانی کوتاه طراحان می‌توانند یک سیستم گسترش‌پذیر را به‌معنای واقعی کلمه ایجاد کنند

یک جامعه باورنکردنی پشتیبانی‌کننده

انجمن‌های جاوا اسکریپت به‌سرعت در حال رشد هستند. همه ماژول‌ها و تکنیک‌های هیجان‌برانگیزی که به دنیای جاوا اسکریپت وارد می‌شوند همراه با خود انجمن‌ها و گروه‌های مختلفی را به همراه می‌آورند که بر روند تکامل آن‌ها تأثیر مثبت می‌گذارند.
حجم بسیار بالای انجمن‌های ساخته شده برای جاوا اسکریپت باعث شده است تا روند ورود جاوا اسکریپت به اینترنت اشیا به‌سادگی امکان‌پذیر باشد. بسیاری از طراحان جاوا اسکریپت جزء برنامه‌نویسان کهنه‌کاری هستند که در زمینه ساخت برنامه‌های جاوا اسکریپت ماژولار متبحر هستند و علاقه وافری به یادگیری دارند.
افرادی که در کوتاه‌ترین زمان قادر هستند برنامه‌های تعاملی را برای دستگاه‌های جدید ایجاد کنند. واقعیت این است که فرآیند ورود از مدت‌ها قبل آغاز شده است، تقریباً چند سالی است دستگاه‌های اینترنت اشیا مبتنی بر جاوا اسکریپت به بازار وارد شده‌اند.
این رشد روزافزون به ما اعلام می‌دارد که در سال‌های آتی جاوا اسکریپت به یکی از بازیگران اکوسیستم اینترنت اشیا تبدیل خواهد شد.

دسته‌ها
وبلاگ

آموزش زبان برنامه نویسی پایتون – قسمت اول

آموزش زبان برنامه نویسی پایتون – قسمت اول

سلام به همه دوستداران عزیز مجله طراحی راکت وب، طبق برنامه ریزی هایی که گرفته شد تصمیم بر این شده که از این به بعد با یک دوره آموزشی کامل پایتون از مقدماتی تا متوسطه در خدمتتون باشیم.

در جلسه اول می خوایم که بیشتر راجب به خود زبان پایتون صحبت کنیم و از اهمیتش برای یادگیری بگیم. پایتون زبان برنامه نویسی سطح بالایی است که توی سال ۱۹۹۱ توی کشور هلند توسط آقای به اسم Guido van Rossum طراحی شد. از ویژگی های اصلی این زبان می شه به سطح بالا بودن، شی گرایی، مفسر و همه منظوره بودن اون اشاره کرد. زبان پایتون یک زبان متن باز و سورس باز است به همین دلیل تا به حال  کتابخانه های بسیار زیادی بر پایه این زبان نوشته شده است.

فلسفه اصلی پایتون نوشتن کمتر کدها و بالابردن خواناییشون هستش، از طرف دیگه ای خیلی از برنامه نویسان ارشد اعتقاد دارند که زبان پایتون بهترین زبان برای یادگیری توی سطح مقدماتی هستش. دلیل خیلی ساده ای هم داره، کارهایی رو که توی پایتون می تونید توی یک خط کد بنویسید با زبانی مثل جاوا همون کار رو توی سه چهار خط باید نوشت. از طرف دیگه ای پایتون توی تمام سیستم عامل ها از جلمه لینوکس، ویندوز و مک قابل دسترسه و می شه با اونا کدنویسی رو شروع کرد.

از مزیت های پایتون می توان به تایپ پویا، مدیریت خودکار حافظه و… اشاره کرد،‌ تمام این ها باعث شدند که پایتون یک زبان فوق العاده قدرتمند و آسان در استفاده باشد. تا به حال برای پایتون نسخه های مختلفی آمده  و در حال حاضر نسخه نهایی این زبان ۳ هستش.

ویژگی های زبان پایتون:

  • زبان پایتون یک زبان مفسری است و برای اجرا شدن از کامپایلر استفاده نمی کند. در حقیقت کدهای پایتون خط به خط اجرا می شن.
  • پایتون زبان تعاملی است، کافی است کدی را بنویسید، پایتون به سرعت به شما خروجی را می دهد.
  • پایتون شئ گراست و از قابلیت شئ و کلاس و … برخوردار است.
  • پایتون Cross-platform است، کدهای پایتون در بیشتر سیستم عامل های شخصی و سرور اجرا می شود.
  • پایتون به خاطر نداشتن حالت دستوری پیچیده و همچنین کلمات کلیدی خیلی کمش، یکی از ساده ترین زبان های ممکن برای یادگیریه.
  • پایتون رو توی مدیریت سرورها، نوشتن برنامه های ساده،‌ نوشتن بازی، ساخت اپلیکیشن های موبایل، اپلیکیشن تحت وب و… استفاده می کنند.

اهداف این دوره

در واقع این دوره برای کسانی نوشته میشه که هیچ دانشی در زمینه زبان پایتون ندارند و می خواهند که با پایتون آشنا بشن و بتونن با سینتکس پایتون بیشتر کار کنن. باید بگم تجربه شخصی ثابت کرده کسایی که قبلا زبان هایی که از سینتکسشون شبیه به زبان سی هستش رو کار کردن کمی عادت گرفتن با سینتکس پایتون براشون سخت خواهد بود. چرا که اینجا از خیلی کم از علامتی مثل آکولاد و… استفاده می شه. توی این دوره قصد داریم که شما رو با آیتم های اولیه یک زبان برنامه نویسی (متغیر، شرط، حلقه و…) آشنا کنیم.

خب توضیحات کافیه بریم که پایتون رو نصب کنیم و ازش استفاده کنیم.

قبل از نصب این نسخه های مختلف پایتون باید اشاره کنم که برای نوشتن کدهای پایتون شما هم می توانید از محیط متنی استفاده کنید و هم از محیط گرافیکی! در این قسمت از آموزش ما صرفا به شما یاد می دهیم که چگونه پایتون را در محیط متنی نصب کنید. چرا؟ درگیر شدن با ابزارهای پیشرفته و پیچیده برای یادگرفتن زبانی به سادگی پایتون در ابتدای یادگیری به نظر شخص بنده کمی نامعقول است. بهتر است که از ابزارهای متنی مانند ترمینال و کامندپرامپت استفاده کنید. البته اگر به توصیه های من گوش نمی دید و دوست دارید پایتون رو توی یک محیط برنامه نویسی حرفه ای تجربه کنید پیشنهاد می کنم از این ابزارها استفاده کنید:

  • Eric Python IDE
  • PyCharm
  • IDLE
  • PyDev

نصب در سیستم عامل لینوکس

به صورت پیشفرض نسخه ای از زبان پایتون روی بیشتر توزیع های لینوکس وجود دارد. روش های مختلفی برای نصب پایتون در توزیع ها وجود دارد. برای نصب پایتون در توزیع اوبونتو کافیست از دستور زیر استفاده کنید.

Sudo apt-get install python3

همچنین می تونید از دستور زیر برای نصب توی توزیع هایی که از مدیریت پاکتyum  بهره می گیرند، استفاده کنید. «مثلا توزیع ردهت»

sudo yum install python

نصب در محیط ویندوز

برای نصب پایتون توی محیط ویندوز شما به بسته نصبی پایتون دارید که براساس احتیاجاتتون و نسخه مورد نیاز می تونید اون رو از اینجا دانلود کنید و ازش استفاده کنید.

نصب در محیط مک

نصب پایتون توی سیستم عامل مک هم دقیقا شبیه همون چیزیه که توی ویندوز گفته شد، شما باید بسته نصبی رو دانلود کنید و در نهایت اون رو روی سیستم تون نصب کنید. برای دانلود نسخه های مختلف پایتون برای مک می تونید به این لینک مراجعه کنید.

بعد از نصب پایتون حال می توانید با وارد شدن به محیط متنی سیستم عامل خود از پایتون استفاده کنید:

وارد شدن به محیط پایتون در سیستم عامل لینوکس و مک

برای وارد شدن به محیط پایتون در سیستم عامل لینوکس و مک کافی است پنجره ترمینال خود را باز کنید و دستور python را بنویسید. بعد از اجرای دستور باید چنین متنی برای شما نمایان شود:

Python 2.7.12 (default, Nov 19 2016, 06:48:10) 

[GCC 5.4.0 20160609] on linux2

Type "help", "copyright", "credits" or "license" for more information.

بعد از اینکار حال می توانید دستورات خود را تایپ کنید و در نهایت برای هر کدام خروجی خود را به صورت بلادرنگ دریافت کنید. برای مثال بنویسید:

print “Roocket.ir”

در نهایت کلید اینتر را فشار دهید و خروجی را آنطور که می خواهید مشاهده کنید.

وارد شدن به محیط پایتون در سیستم عامل ویندوز

شاید استفاده از محیط متنی ویندوز کمی شما را دچار سردرگمی بکند ولی خب اشکالی ندارد در نهایت ویندوز همین گونه است 🙂 ! برای وارد شدن به محیط پایتون شما نمی توانید به صورت مستقیم دستورات را بنویسید و خروجی را بگیرید، بلکه باید یک فایل با پسوند py ساخته و کدهای مورد نظرتان را داخل آن قرار دهید. بعد از آن باید از طریق پنجره خط فرمان وارد پوشه فایل شده و آن را اجرا کنید. پس مراحل کار بدین صورت است:

  • فایلی را با استفاده از Notepad با اسم roocket.py ایجاد کنید.
  • درون فایل دستور زیر را تایپ کنید:
print “Roocket.ir”
  • حال وارد محیط خط فرمان شوید.
  • با استفاده از دستور cd وارد پوشه ای شوید که فایل را ایجاد کرده اید.
  • در نهایت کلمه python و بعد از آن نام فایل همراه با پسوند را تایپ کنید:
python roocket.py

موفق شدید «چقدر خسته کننده است کار توی ویندوز!»