在项目中几个需要学习的知识
首先说今天学习的是做一个图书商城的小项目,但是之前学习的好多知识都要使用上面的啦,嘿嘿,顿时感觉有点成就感,因为之前学习的好多的知识点还是蛮碎的,现在可以通过做程序练习练习,这是在还不过的,在小项目做今天学习了很多的新知识,也许以后工作以后我会使用到这些吧,想清晰点的总结一下,以免忘记可以重新在这里找回,好啦总结一下今天学习的新知识。
一.发送邮件激活注册的账号
public static void SendManyEmail(string id, params string[] EamilTo)
{ //参数EamilTo可能会以键值对的形式存在,由于可能是发送者的地址或者发送者的名字都存在
EamilTo[0] = "403905112@qq.com"; //接收邮件的人
MailMessage mail = new MailMessage();//这个类就包含了所有要发送邮件需要的参数
mail.From = new MailAddress("403905112@qq.com", "lala");///发送者的邮件地址和发送者的名字
foreach (var email in EamilTo)
{
mail.To.Add(new MailAddress(email,"lala"));//目的邮件地址。可以有多个收件人
}
mail.Subject = "Introduce myself"; //发送邮件的主题
StringBuilder builder = new StringBuilder();
string emailaddress = "http://localhost:6994/ashx/ActiveUser.ashx?id=" + id + "&entype=" + Guid.NewGuid().ToString() + "";
builder.Append("<p><a href=" + emailaddress + ">" + emailaddress + "</a></p>");
mail.Body = builder.ToString();//发送邮件的内容
mail.IsBodyHtml = true;//是否发送HTML格式的邮件
SmtpClient client = new SmtpClient("smtp.qq.com");//发送邮件的协议
client.UseDefaultCredentials = true;//设置开启验证
client.Credentials = new NetworkCredential("403905112@qq.com", "123");//用户名和密码
client.Send(mail);//发送邮件
}
上面其实就是我们在浏览其他网页时间需要注册账号,但是不是立即成为此网站的用户,好多都是通过发送邮箱邮件,然后我们需要去邮箱中激活即可乘此此网站的用户,上面的一个方法就是实现其功能的,我们使用类MailMessage时间需要引入命名空间using System.Net.Mail,在使用SmtpClient时间需要引入命名空间using System.Net,这也是我们需要注意的。
另外仅仅发送邮件的实现,需要添加引用Newtonsoft.Json.dll和Mafly.Mail.dll:
var mailService = new Mafly.Mail.Mail(); //参数:接收者邮箱、内容 mailService.Send("abc@163.cn", "测试邮件发送!"); //参数:接收者邮箱、接收者名字、内容 mailService.Send("abc@163.cn", "下雨天", "测试邮件发送!"); //参数:接收者邮箱、接收者名字、邮件主题、内容 mailService.Send("abc@163.cn", "下雨天", "邮件发送", "测试邮件发送!"); //使用MailInfo对象模式 参数:接收者邮箱、接收者名字、邮件主题、内容 mailService.Send(new MailInfo { Receiver = "abc@163.cn", ReceiverName = "下雨天", Subject = "邮件发送", Body = "测试邮件发送!" }); //使用MailInfo对象模式 参数:接收者邮箱、接收者名字、邮件主题、内容、附件路径 mailService.Send( new MailInfo { Receiver = "abc@163.cn", ReceiverName = "下雨天", Subject = "带附件邮件发送", Body = "测试带附件邮件发送!" }, "../../Program.cs"); //使用MailInfo对象模式 参数:接收者邮箱、接收者名字、邮件主题、内容、多附件路径 mailService.Send( new MailInfo { Receiver = "abc@163.cn", ReceiverName = "下雨天", Subject = "带附件邮件发送", Body = "测试带附件邮件发送!" }, new Attachment("../../Program.cs"), new Attachment("../../App.config"));
二.判断验证码的封装
/// <summary>
/// 判断验证码
/// </summary>
/// <param name="vcode">验证码上面的数字,即客户端的值</param>
/// <param name="session">服务器上面的值</param>
/// <returns>是否相等,不等时间为true,相等时间为false</returns>
public static bool VCodeEqualSession(string vcode, string session)
{
if (!vcode.Equals(session, StringComparison.OrdinalIgnoreCase))
{ //不区分大小写
return true;
}
else
{
return false;
}
}
前面总结了写一个验证码的写法以及调用,但是我们可以想到我们在注册时间需要判断验证码,但是在登录时间仍然需要,在商城中支付时间也是需要的,等等,这些我们就是使其代码冗余,与其这样我就就来疯转一个方法如上所示判断验证码输入是否正确。
三.密码加密使用MD5
/// <summary>
/// 用户注册密码使用MD5加密方式进行加密
/// </summary>
/// <param name="pwd">用户输入的密码</param>
/// <returns>字符串类型加密后的密码</returns>
public static string Md5Security(string pwd)
{
byte[] firpwd = Encoding.Default.GetBytes(pwd);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] secpwd = md5.ComputeHash(firpwd);
return BitConverter.ToString(secpwd).Replace("-","").ToLower();
}
其实对于我们来说MD5的加密方式已经是很熟悉的啦,但是我们之前都没有对其封装,只是每次使用一次都写一次方法,例如:我们在注册时间对其密码进行了加密,那么我们在登录时间加密也是很有必要的,因此这时间我们进行封转就不会出现代码冗余的情况。希望以后能养成后的习惯,熟练的封装类,嘿嘿。
四.model中建立外键的关系
private UserStates u=new UserStates();
public UserStates UserStateId
{
set { u= value; }
get{return u;}
}
public partial class UserStates
{
public UserStates()
{}
private int _id;
private string _name;
public int Id
{
set{ _id=value;}
get{return _id;}
}
public string Name
{
set{ _name=value;}
get{return _name;}
}
}
new SqlParameter("@otherid",model.UserStateId.Id)
上面就是我们以后要是建立外键关系时间需要注意的地方,由于在数据库中建立外键关系,想要改变其中一张表的结构,那么另外一张表的关系大多时间下也受约束需要改变,这样改变起来甚是麻烦的,而且在以后的工作中对数据库的操作也不一定是我们程序员做的事情,当然这个视情况而定的,所以我们把关系建立在model实体类里面,建立的外键并不是想要获取其外键,而是通过外键获取另外一张表的信息,因此我是直接使用这样的方法让我们使用起来更加的方便。首先需要实例化一下与本张表相关联的model类,然后创建一个对象,此时我们的属性就可以写为一个“类名:对象”,然后如上面所示,我们在调用model中的属性时间需要model.UserStateId.Id来调用其id,总之就是这样的。
好啦,今天就总计到这里,其实还有好多需要总结的啦,就等到明天吧,我还需要更多的时间练习,嘿嘿,每当开始做项目时间还是蛮激动的,不论是兴趣也好,希望也好,但是我就是渴望自己能够通过努力看到自己能够完成更多的程序,加油加油!!!